From 76871f0f310eb6e7fec812d33884be46a5da6833 Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Fri, 8 Aug 2008 21:17:54 +0000 Subject: [PATCH] re PR c++/35985 (ICE with pointer to member function as base) PR c++/35985 * decl.c (xref_basetypes): Check base for MAYBE_CLASS_TYPE_P, and make sure it is not a union. * g++.dg/inherit/base3.C: New. From-SVN: r138886 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 5 +---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/inherit/base3.C | 8 ++++++++ 4 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/inherit/base3.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5e5d1c28c46..d37f31f96fb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-08-08 Volker Reichelt + + PR c++/35985 + * decl.c (xref_basetypes): Check base for MAYBE_CLASS_TYPE_P, + and make sure it is not a union. + 2008-08-07 H.J. Lu * semantics.c (finish_decltype_type): Initialize type. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 4c340e28a91..691056252aa 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -10616,10 +10616,7 @@ xref_basetypes (tree ref, tree base_list) basetype = PACK_EXPANSION_PATTERN (basetype); if (TREE_CODE (basetype) == TYPE_DECL) basetype = TREE_TYPE (basetype); - if (TREE_CODE (basetype) != RECORD_TYPE - && TREE_CODE (basetype) != TYPENAME_TYPE - && TREE_CODE (basetype) != TEMPLATE_TYPE_PARM - && TREE_CODE (basetype) != BOUND_TEMPLATE_TEMPLATE_PARM) + if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE) { error ("base type %qT fails to be a struct or class type", basetype); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0d9eb93a2cc..22bd5e5e4d4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-08-08 Volker Reichelt + + PR c++/35985 + * g++.dg/inherit/base3.C: New. + 2008-08-08 Dorit Nuzman * lib/target-supports.exp (check_effective_target_vect_floatint_cvt): diff --git a/gcc/testsuite/g++.dg/inherit/base3.C b/gcc/testsuite/g++.dg/inherit/base3.C new file mode 100644 index 00000000000..c586e39d19e --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/base3.C @@ -0,0 +1,8 @@ +// PR c++/35985 +// { dg-do compile } + +template struct A : T {}; // { dg-error "struct or class type" } + +struct B; + +A a; // { dg-error "instantiated" }