aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVolker Reichelt <v.reichelt@netcologne.de>2008-08-08 21:17:54 +0000
committerVolker Reichelt <reichelt@gcc.gnu.org>2008-08-08 21:17:54 +0000
commit76871f0f310eb6e7fec812d33884be46a5da6833 (patch)
treeb8cf033d852dd0b4272c3cb660f3af338b2c83b6 /gcc
parent7910ae0cde83554100eefaca68a506bb25655498 (diff)
downloadgcc-76871f0f310eb6e7fec812d33884be46a5da6833.zip
gcc-76871f0f310eb6e7fec812d33884be46a5da6833.tar.gz
gcc-76871f0f310eb6e7fec812d33884be46a5da6833.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/inherit/base3.C8
4 files changed, 20 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 5e5d1c2..d37f31f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2008-08-08 Volker Reichelt <v.reichelt@netcologne.de>
+
+ 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 <hongjiu.lu@intel.com>
* semantics.c (finish_decltype_type): Initialize type.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 4c340e2..6910562 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 0d9eb93..22bd5e5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-08-08 Volker Reichelt <v.reichelt@netcologne.de>
+
+ PR c++/35985
+ * g++.dg/inherit/base3.C: New.
+
2008-08-08 Dorit Nuzman <dorit@il.ibm.com>
* 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 0000000..c586e39
--- /dev/null
+++ b/gcc/testsuite/g++.dg/inherit/base3.C
@@ -0,0 +1,8 @@
+// PR c++/35985
+// { dg-do compile }
+
+template<typename T> struct A : T {}; // { dg-error "struct or class type" }
+
+struct B;
+
+A<void (B::*)()> a; // { dg-error "instantiated" }