aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2006-09-01 18:10:17 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2006-09-01 18:10:17 +0000
commit1b8d97ae2bf30587e3993d045afde7aea885b856 (patch)
treeab34074aaf83251062553222ae454f8524bf7c3d /gcc/testsuite/g++.dg
parent09607d08db43801d0b2fb32f7bf5ec196f9b563a (diff)
cp/
PR c++/28705 * semantics.c (finish_call_expr): Add assert. * name-lookup.c (lookup_arg_dependent): Check we found an overload or an object. testsuite/ PR c++/28705 * g++.dg/lookup/koenig5.C: New. * g++.dg/template/crash56.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116638 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg')
-rw-r--r--gcc/testsuite/g++.dg/lookup/koenig5.C46
-rw-r--r--gcc/testsuite/g++.dg/template/crash56.C16
2 files changed, 62 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/lookup/koenig5.C b/gcc/testsuite/g++.dg/lookup/koenig5.C
new file mode 100644
index 00000000000..139e3b86684
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lookup/koenig5.C
@@ -0,0 +1,46 @@
+// Koenig lookup is not defined as intended in the std. DR 218 gives
+// an indication of what is meant. This test case encapsulates the
+// current conservative behaviour
+
+// Copyright (C) 2006 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 27 Aug 2006 <nathan@codesourcery.com>
+
+namespace N
+{
+ struct A {};
+ void One (...); // { dg-error "conflict with" "" }
+ void (*Two) (...); // { dg-error "not a function" "" }
+ namespace Three {} // { dg-error "lookup finds|not a function" "" }
+}
+
+namespace M
+{
+ struct B {};
+ struct One {}; // { dg-error "lookup finds|not a function" "" }
+ void (*Two) (...); // { dg-error "conflict with" "" }
+ void Three (...); // { dg-error "conflict with" "" }
+}
+
+namespace O
+{
+ struct C {};
+ void Two (...); // { dg-error "conflict with" "" }
+}
+
+void g (N::A *a, M::B *b, O::C *c)
+{
+ One (a); // ok
+ One (b); // { dg-error "in call to" "" }
+ One (a, b); // { dg-error "in call to" "" }
+
+ Two (a); // ok
+ Two (a, a); // ok
+ Two (b); // ok
+ Two (c); // ok
+ Two (a, b); // { dg-error "in call to" "" }
+ Two (a, c); // { dg-error "in call to" "" }
+
+ Three (a); // { dg-error "in call to" "" }
+ Three (b); // ok
+ Three (a, b); // { dg-error "in call to" "" }
+}
diff --git a/gcc/testsuite/g++.dg/template/crash56.C b/gcc/testsuite/g++.dg/template/crash56.C
new file mode 100644
index 00000000000..1efa3500d8a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/crash56.C
@@ -0,0 +1,16 @@
+// Origin: Wolfgang Bangerth <bangerth@dealii.org>
+
+// PR c++/28705
+// DR 218 is debating whether this is well formed or not. We've never
+// accepted it (because we'd crash), so we continue to reject it, but
+// without crashing.
+
+namespace N
+{
+ struct A { A (A*); }; // { dg-error "lookup finds" "" }
+}
+
+template<typename T> void g (N::A *p)
+{
+ (void) A (p); // { dg-error "in call" "" }
+}