]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/28432 (duplicate "no member function declared" message)
authorSteve Ellcey <sje@cup.hp.com>
Tue, 1 Aug 2006 16:45:14 +0000 (16:45 +0000)
committerSteve Ellcey <sje@gcc.gnu.org>
Tue, 1 Aug 2006 16:45:14 +0000 (16:45 +0000)
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: r115857

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/cp/search.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/pr28304.C
gcc/testsuite/g++.dg/other/pr28432.C [new file with mode: 0644]

index 8fe52a90c0f0d5fd3bc418380221a3ac8725dc59..a93e420ff862a0ceb63daf478370ebf348c25a0d 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-01  Steve Ellcey  <sje@cup.hp.com>
+
+       PR c++/28432
+       * decl2.c (check_classfn): Remove early return.
+       * search.c (lookup_member): Return NULL with bad type.
+
 2006-08-01  Steve Ellcey  <sje@cup.hp.com>
 
        PR c++/28256
index faee0aaf693dec0459e95d1c2f26aa4e9fca6a09..8b39b81901a04383d41b1822aa00b8d956b14a1d 100644 (file)
@@ -673,11 +673,8 @@ check_classfn (tree ctype, tree function, tree template_parms)
   else if (!COMPLETE_TYPE_P (ctype))
     cxx_incomplete_type_error (function, ctype);
   else
-    {
-      error ("no %q#D member function declared in class %qT",
-            function, ctype);
-      return NULL_TREE;
-    }
+    error ("no %q#D member function declared in class %qT",
+          function, ctype);
 
   /* If we did not find the method in the class, add it to avoid
      spurious errors (unless the CTYPE is not yet defined, in which
index 50e704fe366a5e5acfa715b80b614c38ff3edeaa..d54e6078cb13f0dffdb7b9e736f5bf2fdde61a68 100644 (file)
@@ -1209,7 +1209,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;
     }
index e1a69c1dd9ad21e3e06610bb021592237e7905f6..097e7842afc5828295b65326a3da0b6cf944e70d 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-01  Steve Ellcey  <sje@cup.hp.com>
+
+       PR c++/28432
+       * g++.dg/other/pr28304.C: Change expected error message.
+       * g++.dg/other/pr28432.C: New test.
+
 2006-08-01  Steve Ellcey  <sje@cup.hp.com>
 
        PR c++/28256
index 9a0e9cdd791cadeb9d0bba4a11b8c9f09480aacc..c86efd48963724236ff67ba2d33a2d27f390e6b1 100644 (file)
@@ -7,5 +7,5 @@ template<typename T> 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 (file)
index 0000000..2b9c763
--- /dev/null
@@ -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" }