cp:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 12 Oct 2001 09:06:32 +0000 (09:06 +0000)
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 12 Oct 2001 09:06:32 +0000 (09:06 +0000)
PR g++/4476
* typeck2.c (abstract_virtuals_error): Ignore incomplete classes.
testsuite:
PR g++/4476
* g++.dg/other/friend1.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46226 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/typeck2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/friend1.C [new file with mode: 0644]

index 4c4cdce..50af839 100644 (file)
@@ -1,3 +1,8 @@
+2001-10-12  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR g++/4476
+       * typeck2.c (abstract_virtuals_error): Ignore incomplete classes.
+
 2001-10-11  Jason Merrill  <jason_merrill@redhat.com>
 
        * typeck2.c (store_init_value): Don't re-digest a bracketed
index fbedc13..2a9b2a9 100644 (file)
@@ -140,6 +140,11 @@ abstract_virtuals_error (decl, type)
   if (!CLASS_TYPE_P (type) || !CLASSTYPE_PURE_VIRTUALS (type))
     return 0;
 
+  if (!TYPE_SIZE (type))
+    /* TYPE is being defined, and during that time
+       CLASSTYPE_PURE_VIRTUALS holds the inline friends.  */
+    return 0;
+
   u = CLASSTYPE_PURE_VIRTUALS (type);
   if (decl)
     {
index d7fd68e..2a50b83 100644 (file)
@@ -1,3 +1,8 @@
+2001-10-12  Nathan Sidwell  <nathan@codesourcery.com>
+
+       PR g++/4476
+       * g++.dg/other/friend1.C: New test.
+
 2001-10-11  Richard Henderson  <rth@redhat.com>
 
        * g++.old-deja/g++.other/crash18.C: Add -S to options.
diff --git a/gcc/testsuite/g++.dg/other/friend1.C b/gcc/testsuite/g++.dg/other/friend1.C
new file mode 100644 (file)
index 0000000..3193180
--- /dev/null
@@ -0,0 +1,12 @@
+// { dg-do compile }
+
+// Copyright (C) 2001 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 10 Oct 2001 <nathan@codesourcery.com>
+
+// Bug 4476. We tangled up inline friends and pure virtuals during
+// class definition.
+
+struct A {
+  friend void f () { }
+  void g (A a) {  }
+};