diff options
author | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-09-01 18:10:17 +0000 |
---|---|---|
committer | nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-09-01 18:10:17 +0000 |
commit | 1b8d97ae2bf30587e3993d045afde7aea885b856 (patch) | |
tree | ab34074aaf83251062553222ae454f8524bf7c3d /gcc/testsuite/g++.dg | |
parent | 09607d08db43801d0b2fb32f7bf5ec196f9b563a (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.C | 46 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash56.C | 16 |
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" "" } +} |