From b646edb85c5be9813851a21cddf0e9472d4023c2 Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Thu, 17 Aug 2006 08:06:27 +0000 Subject: [PATCH] re PR c++/28710 (ICE redeclaring template as non-template) PR c++/28710 * decl.c (xref_tag): Improve error message. Return early on error. * g++.dg/template/redecl4.C: New test. From-SVN: r116211 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/decl.c | 3 ++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/template/redecl4.C | 5 +++++ 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/redecl4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 650e393cbc0..94de8b7afaa 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2006-08-17 Volker Reichelt + PR c++/28710 + * decl.c (xref_tag): Improve error message. Return early on error. + PR c++/28711 * pt.c (tsubst_copy_and_build) : Robustify. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b03ea62a2ed..a8ec398e1ff 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -9695,7 +9695,8 @@ xref_tag (enum tag_types tag_code, tree name, && CLASSTYPE_IS_TEMPLATE (t)) { error ("redeclaration of %qT as a non-template", t); - t = error_mark_node; + error ("previous declaration %q+D", t); + POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, error_mark_node); } /* Make injected friend class visible. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6805eb1e6a3..5824e853317 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-08-17 Volker Reichelt + PR c++/28710 + * g++.dg/template/redecl4.C: New test. + PR c++/28711 * g++.dg/template/ctor8.C: New test. diff --git a/gcc/testsuite/g++.dg/template/redecl4.C b/gcc/testsuite/g++.dg/template/redecl4.C new file mode 100644 index 00000000000..9a4a9f366e9 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/redecl4.C @@ -0,0 +1,5 @@ +// PR c++/28710 +// { dg-do compile } + +template union A; // { dg-error "previous" } +struct A; // { dg-error "non-template" } -- 2.30.2