From 37d7799c9272d233791c9513e1d9bc7cdf23b014 Mon Sep 17 00:00:00 2001 From: Steve Ellcey Date: Thu, 3 Aug 2006 17:16:20 +0000 Subject: [PATCH] re PR c++/28432 (duplicate "no member function declared" message) PR c++/28432 * decl2.c (check_classfn): Remove early return. * search.c (lookup_member): Return NULL with bad type. * g++.dg/other/pr28304.C: Change expected error message. * g++.dg/other/pr28432.C: New test. From-SVN: r115908 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl2.c | 1 - gcc/cp/search.c | 3 ++- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/other/pr28304.C | 2 +- gcc/testsuite/g++.dg/other/pr28432.C | 7 +++++++ 6 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/other/pr28432.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 36b753e21dd9..26631e22c4a0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2006-08-03 Steve Ellcey + + PR c++/28432 + * decl2.c (check_classfn): Remove early return. + * search.c (lookup_member): Return NULL with bad type. + 2006-08-03 Volker Reichelt PR c++/27508 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index ca8c323071b0..f9673eed0db4 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -710,7 +710,6 @@ check_classfn (tree ctype, tree function, tree template_parms) { error ("no %q#D member function declared in class %qT", function, ctype); - return NULL_TREE; } /* If we did not find the method in the class, add it to avoid diff --git a/gcc/cp/search.c b/gcc/cp/search.c index aed8a7aeb0b1..3eb279170ebc 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -1213,7 +1213,8 @@ lookup_member (tree xbasetype, tree name, int protect, bool want_type) } else { - gcc_assert (IS_AGGR_TYPE_CODE (TREE_CODE (xbasetype))); + if (!IS_AGGR_TYPE_CODE (TREE_CODE (xbasetype))) + return NULL_TREE; type = xbasetype; xbasetype = NULL_TREE; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 71755d9e6506..51ccf8c57e87 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2006-08-03 Steve Ellcey + + PR c++/28432 + * g++.dg/other/pr28304.C: Change expected error message. + * g++.dg/other/pr28432.C: New test. + 2006-08-03 Volker Reichelt PR c++/28250 diff --git a/gcc/testsuite/g++.dg/other/pr28304.C b/gcc/testsuite/g++.dg/other/pr28304.C index 9a0e9cdd791c..c86efd489637 100644 --- a/gcc/testsuite/g++.dg/other/pr28304.C +++ b/gcc/testsuite/g++.dg/other/pr28304.C @@ -7,5 +7,5 @@ template void A::foo(T) {} // { dg-error "" } void bar() { - A::foo(1); // { dg-error "not a member" } + A::foo(1); // { dg-error "no matching function for call" } } diff --git a/gcc/testsuite/g++.dg/other/pr28432.C b/gcc/testsuite/g++.dg/other/pr28432.C new file mode 100644 index 000000000000..2b9c76343671 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr28432.C @@ -0,0 +1,7 @@ + +// Test to make sure we do not ICE on this invalid program. + +// { dg-options "" } + +struct A {}; +void A::foo(); // { dg-error "member function declared in class|outside of class is not definition" } -- 2.47.2