From: Volker Reichelt Date: Wed, 7 Dec 2005 19:40:24 +0000 (+0000) Subject: re PR c++/19397 (ICE with invalid typedef) X-Git-Tag: releases/gcc-3.4.6~261 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=783d3a096e4da54e9ddeead300f42cc8b82fdc0d;p=thirdparty%2Fgcc.git re PR c++/19397 (ICE with invalid typedef) PR c++/19397 PR c++/19762 PR c++/19764 * parser.c (cp_parser_declarator_id): Check for error_mark_node before building a SCOPE_REF. * g++.dg/template/typedef3.C: New test. * g++.dg/template/dtor3.C: Fix error markers. From-SVN: r108174 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4f884dba1582..cdfb99314674 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2005-12-07 Volker Reichelt + + PR c++/19397 + PR c++/19762 + PR c++/19764 + * parser.c (cp_parser_declarator_id): Check for error_mark_node + before building a SCOPE_REF. + 2005-12-07 Volker Reichelt Backport: diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index c52fa16a3003..24b802b33fa8 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -10905,7 +10905,7 @@ cp_parser_declarator_id (cp_parser* parser) /*declarator_p=*/true); /* If the name was qualified, create a SCOPE_REF to represent that. */ - if (parser->scope) + if (parser->scope && id_expression != error_mark_node) { id_expression = build_nt (SCOPE_REF, parser->scope, id_expression); parser->scope = NULL_TREE; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 51c272d4c829..436925ca823f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2005-12-07 Volker Reichelt + + PR c++/19397 + * g++.dg/template/typedef3.C: New test. + + PR c++/19762 + PR c++/19764 + * g++.dg/template/dtor3.C: Fix error markers. + 2005-12-07 Volker Reichelt Backport: diff --git a/gcc/testsuite/g++.dg/template/dtor3.C b/gcc/testsuite/g++.dg/template/dtor3.C index 7f4099861fb6..98c2ef6c18ac 100644 --- a/gcc/testsuite/g++.dg/template/dtor3.C +++ b/gcc/testsuite/g++.dg/template/dtor3.C @@ -1,4 +1,4 @@ // PR c++/19762 template struct A { ~A(){} }; // { dg-error "" } -template A<>::~A(); // { dg-error "" } +template A<>::~A(); // { dg-error "template|declaration" } diff --git a/gcc/testsuite/g++.dg/template/typedef3.C b/gcc/testsuite/g++.dg/template/typedef3.C new file mode 100644 index 000000000000..481f451d84e7 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/typedef3.C @@ -0,0 +1,7 @@ +// PR c++/19397 +// { dg-do compile } + +template struct A +{ + typedef int ::template; // { dg-error "template" } +};