diff options
author | Lee Millward <lee.millward@codesourcery.com> | 2006-09-21 18:22:11 +0000 |
---|---|---|
committer | Lee Millward <lmillward@gcc.gnu.org> | 2006-09-21 18:22:11 +0000 |
commit | d2a8ac2cf23c32f56a8aa2a820859aa91b810f31 (patch) | |
tree | 1951a9dc7fa513c992fe91492b224f0110e7f624 /gcc | |
parent | 7ffb61d5030d7299320beb9b16978a66d6513d86 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/crash9.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/spec32.C | 6 |
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" } +}; |