From 5b69f8a28ada5bde3623a551292dc879031d6517 Mon Sep 17 00:00:00 2001 From: Kriang Lerdsuwanakij Date: Mon, 24 Feb 2003 15:29:29 +0000 Subject: [PATCH] re PR c++/9602 (Total confusion about template/friend/virtual/abstract) PR c++/9602 * typeck2.c (abstract_virtuals_error): Don't check when we are processing a template. * g++.dg/template/friend16.C: New test. From-SVN: r63361 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/typeck2.c | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/friend16.C | 16 ++++++++++++++++ 4 files changed, 33 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/friend16.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a3df8915464f..6c0c6ef21c2c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-02-24 Kriang Lerdsuwanakij + + PR c++/9602 + * typeck2.c (abstract_virtuals_error): Don't check when we + are processing a template. + 2003-02-23 Kriang Lerdsuwanakij PR c++/7982 diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index f8e612bf6a87..4e1acc4bebf2 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -133,6 +133,12 @@ abstract_virtuals_error (decl, type) tree u; tree tu; + if (processing_template_decl) + /* If we are processing a template, TYPE may be a template + class where CLASSTYPE_PURE_VIRTUALS always contains + inline friends. */ + return 0; + if (!CLASS_TYPE_P (type) || !CLASSTYPE_PURE_VIRTUALS (type)) return 0; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e6ee0b96f78a..88dcd59be16f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-02-24 Kriang Lerdsuwanakij + + PR c++/9602 + * g++.dg/template/friend16.C: New test. + 2003-02-23 Hans-Peter Nilsson * gcc.dg/asmreg-1.c: New test. diff --git a/gcc/testsuite/g++.dg/template/friend16.C b/gcc/testsuite/g++.dg/template/friend16.C new file mode 100644 index 000000000000..3165ed2b59d8 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/friend16.C @@ -0,0 +1,16 @@ +// { dg-do compile } + +// Origin: Wolfgang Bangerth + +// PR c++/9602: Inline friend/pure virtual tree data sharing in +// class template. + +template struct X { + void foo (X); + friend void bar () {} +}; + +template +void X::foo (X x) {} + +template struct X; -- 2.47.2