aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorLee Millward <lee.millward@codesourcery.com>2006-09-21 18:22:11 +0000
committerLee Millward <lmillward@gcc.gnu.org>2006-09-21 18:22:11 +0000
commitd2a8ac2cf23c32f56a8aa2a820859aa91b810f31 (patch)
tree1951a9dc7fa513c992fe91492b224f0110e7f624 /gcc
parent7ffb61d5030d7299320beb9b16978a66d6513d86 (diff)
downloadgcc-d2a8ac2cf23c32f56a8aa2a820859aa91b810f31.zip
gcc-d2a8ac2cf23c32f56a8aa2a820859aa91b810f31.tar.gz
gcc-d2a8ac2cf23c32f56a8aa2a820859aa91b810f31.tar.bz2
re PR c++/28861 (ICE on invalid in-class specialization)
PR c++/28861 * decl.c (shadow_tag): Return error_mark_node if maybe_process_partial_specialization failed. * g++.dg/template/spec32.C: New test. * g++.dg/parse/crash9.C: Adjust error markers. From-SVN: r117117
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c3
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/parse/crash9.C2
-rw-r--r--gcc/testsuite/g++.dg/template/spec32.C6
5 files changed, 21 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index fed109f..fce58ed 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-21 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/28861
+ * decl.c (shadow_tag): Return error_mark_node
+ if maybe_process_partial_specialization failed.
+
2006-09-20 Danny Smith <dannysmith@users.sourceforge.net>
PR target/27650
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 46c1d33..1d83aa3 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -3745,7 +3745,8 @@ shadow_tag (cp_decl_specifier_seq *declspecs)
}
- maybe_process_partial_specialization (t);
+ if (maybe_process_partial_specialization (t) == error_mark_node)
+ return NULL_TREE;
/* This is where the variables in an anonymous union are
declared. An anonymous union declaration looks like:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 788df37..f1be2ad 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-21 Lee Millward <lee.millward@codesourcery.com>
+
+ PR c++/28861
+ * g++.dg/template/spec32.C: New test.
+ * g++.dg/parse/crash9.C: Adjust error markers.
+
2006-09-21 Janis Johnson <janis187@us.ibm.com>
* gcc.dg/dfp/decfloat-constants.c: Remove 'dg-do compile', fix typo.
diff --git a/gcc/testsuite/g++.dg/parse/crash9.C b/gcc/testsuite/g++.dg/parse/crash9.C
index 44ce57b..d121d5d 100644
--- a/gcc/testsuite/g++.dg/parse/crash9.C
+++ b/gcc/testsuite/g++.dg/parse/crash9.C
@@ -6,4 +6,4 @@
// contains error.
template <typename> struct A {};
-template <typename> struct A<INVALID> : A<int> { }; // { dg-error "not declared|invalid" }
+template <typename> struct A<INVALID> : A<int> { }; // { dg-error "not declared|invalid|token|extra" }
diff --git a/gcc/testsuite/g++.dg/template/spec32.C b/gcc/testsuite/g++.dg/template/spec32.C
new file mode 100644
index 0000000..6ef172b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/spec32.C
@@ -0,0 +1,6 @@
+//PR c++/28861
+
+struct A
+{
+ template<template<int> class B> struct B<0>; // { dg-error "name of class shadows" }
+};