diff options
author | lmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-07-18 17:22:39 +0000 |
---|---|---|
committer | lmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-07-18 17:22:39 +0000 |
commit | 5234121228691c11d68513df94043b3fd9e27107 (patch) | |
tree | 47341d836482d990d2715e53e3a1fe393fea0c52 | |
parent | a88e3b1432a6560269207415760f1997bc067861 (diff) | |
download | gcc-5234121228691c11d68513df94043b3fd9e27107.tar.gz |
PR c++/28258
* method.c (locate_copy): Check for non_reference
returning error_mark_node.
PR c++/28260
* decl.c (duplicate_decls): Return error_mark_node
on ambiguous declaration.
PR c++/28258
* g++/dg/other/error13.C: New test.
PR c++/28260
* g++.dg/template/friend44.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115561 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/decl.c | 1 | ||||
-rw-r--r-- | gcc/cp/method.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/other/error13.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/friend44.C | 8 |
6 files changed, 41 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6f0b96b5b4c..cf7a062bd61 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2006-07-18 Lee Millward <lee.millward@gmail.com> + + PR c++/28258 + * method.c (locate_copy): Check for non_reference + returning error_mark_node. + + PR c++/28260 + * decl.c (duplicate_decls): Return error_mark_node + on ambiguous declaration. + 2006-07-18 Steve Ellcey <sje@cup.hp.com> PR c++/27495 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index dd0e7e3e892..6165a2fb4fe 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -1371,6 +1371,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) { error ("new declaration %q#D", newdecl); error ("ambiguates old declaration %q+#D", olddecl); + return error_mark_node; } else return NULL_TREE; diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 9029e85a653..312e3a9c04a 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -946,6 +946,10 @@ locate_copy (tree type, void *client_) if (!parms) continue; src_type = non_reference (TREE_VALUE (parms)); + + if (src_type == error_mark_node) + return NULL_TREE; + if (!same_type_ignoring_top_level_qualifiers_p (src_type, type)) continue; if (!sufficient_parms_p (TREE_CHAIN (parms))) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4df2b2f7201..2025aadbacc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2006-07-18 Lee Millward <lee.millward@gmail.com> + + PR c++/28258 + * g++/dg/other/error13.C: New test. + + PR c++/28260 + * g++.dg/template/friend44.C: New test. + 2006-07-18 Steve Ellcey <sje@cup.hp.com> PR c++/27495 diff --git a/gcc/testsuite/g++.dg/other/error13.C b/gcc/testsuite/g++.dg/other/error13.C new file mode 100644 index 00000000000..037e28866e1 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/error13.C @@ -0,0 +1,10 @@ +//PR c++/28258 + +struct A +{ // { dg-error "" } + A(void x); // { dg-error "invalid use|incomplete type|candidates" } +}; + +struct B : A {}; // { dg-error "no matching function for call" } + +B b; // { dg-error "synthesized method" } diff --git a/gcc/testsuite/g++.dg/template/friend44.C b/gcc/testsuite/g++.dg/template/friend44.C new file mode 100644 index 00000000000..a0f63c866ae --- /dev/null +++ b/gcc/testsuite/g++.dg/template/friend44.C @@ -0,0 +1,8 @@ +//PR c++/28260 + +template<int> struct A +{ + friend int foo(); // { dg-error "new declaration" } +}; + +void foo() { A<0> a; } // { dg-error "ambiguates old declaration" } |