From 5f30d323259968ac805a1da27e371445e8a7c053 Mon Sep 17 00:00:00 2001 From: nathan Date: Fri, 12 Oct 2001 09:06:32 +0000 Subject: [PATCH] cp: 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 | 5 +++++ gcc/cp/typeck2.c | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/other/friend1.C | 12 ++++++++++++ 4 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/g++.dg/other/friend1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4c4cdce..50af839 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-10-12 Nathan Sidwell + + PR g++/4476 + * typeck2.c (abstract_virtuals_error): Ignore incomplete classes. + 2001-10-11 Jason Merrill * typeck2.c (store_init_value): Don't re-digest a bracketed diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index fbedc13..2a9b2a9 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -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) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d7fd68e..2a50b83 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2001-10-12 Nathan Sidwell + + PR g++/4476 + * g++.dg/other/friend1.C: New test. + 2001-10-11 Richard Henderson * 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 index 0000000..3193180 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/friend1.C @@ -0,0 +1,12 @@ +// { dg-do compile } + +// Copyright (C) 2001 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 10 Oct 2001 + +// Bug 4476. We tangled up inline friends and pure virtuals during +// class definition. + +struct A { + friend void f () { } + void g (A a) { } +}; -- 2.7.4