From: Volker Reichelt Date: Thu, 19 Jan 2006 17:37:49 +0000 (+0000) Subject: re PR c++/25854 (Bogus diagnostic with '') X-Git-Tag: releases/gcc-3.4.6~143 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d829f35dd37126e217879515ae30dec6442d407b;p=thirdparty%2Fgcc.git re PR c++/25854 (Bogus diagnostic with '') PR c++/25854 * pt.c (maybe_process_partial_specialization): Return early on error_mark_node. * g++.dg/template/spec28.C: New test. From-SVN: r109978 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c540dbde9054..2d5c6b106fd2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2006-01-19 Volker Reichelt + + PR c++/25854 + * pt.c (maybe_process_partial_specialization): Return early on + error_mark_node. + 2005-12-19 Volker Reichelt PR c++/20552 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index e916c3786d73..aca2dcd53618 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -744,8 +744,12 @@ check_specialization_namespace (tree tmpl) void maybe_process_partial_specialization (tree type) { - /* TYPE maybe an ERROR_MARK_NODE. */ - tree context = TYPE_P (type) ? TYPE_CONTEXT (type) : NULL_TREE; + tree context; + + if (type == error_mark_node) + return; + + context = TYPE_CONTEXT (type); if (CLASS_TYPE_P (type) && CLASSTYPE_USE_TEMPLATE (type)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index da846acc44b7..1e2995be7f8f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-01-19 Volker Reichelt + + PR c++/25854 + * g++.dg/template/spec28.C: New test. + 2006-01-16 Ian Lance Taylor * consistency.vlad: Remove entire directory, 1652 files. diff --git a/gcc/testsuite/g++.dg/template/spec28.C b/gcc/testsuite/g++.dg/template/spec28.C new file mode 100644 index 000000000000..f0bb22caeb40 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/spec28.C @@ -0,0 +1,6 @@ +// PR c++/25854 +// Bad diagnostic +// { dg-do compile } + +template struct A {}; // { dg-error "provided" } +template<> struct A<> {}; // { dg-error "wrong number" }