From 3adee96c46c8f70fb52de86775c1524654f10f22 Mon Sep 17 00:00:00 2001 From: Kriang Lerdsuwanakij Date: Thu, 7 Aug 2003 14:36:39 +0000 Subject: [PATCH] re PR c++/5767 (ICE with forwarding template template parameters) PR c++/5767 * parser.c (cp_parser_class_name): Return immediately when scope is error_mark_node. * g++.dg/parse/crash11.C: New test. From-SVN: r70226 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 3 +++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/parse/crash11.C | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/crash11.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 87f0107..9c89733 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-08-07 Kriang Lerdsuwanakij + + PR c++/5767 + * parser.c (cp_parser_class_name): Return immediately when scope + is error_mark_node. + 2003-08-07 Aldy Hernandez * cp/Make-lang.in (cp/call.o): Add dependency for target.h. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index fce69ca..12f541a 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -10957,6 +10957,9 @@ cp_parser_class_name (cp_parser *parser, /* PARSER->SCOPE can be cleared when parsing the template-arguments to a template-id, so we save it here. */ scope = parser->scope; + if (scope == error_mark_node) + return error_mark_node; + /* Any name names a type if we're following the `typename' keyword in a qualified name where the enclosing scope is type-dependent. */ typename_p = (typename_keyword_p && scope && TYPE_P (scope) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0e039d5..9c7ea3b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-08-07 Kriang Lerdsuwanakij + + PR c++/5767 + * g++.dg/parse/crash11.C: New test. + 2003-08-06 Alexandre Oliva * gcc.dg/cpp/spacing1.c: Update. diff --git a/gcc/testsuite/g++.dg/parse/crash11.C b/gcc/testsuite/g++.dg/parse/crash11.C new file mode 100644 index 0000000..8e6c73b --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash11.C @@ -0,0 +1,34 @@ +// { dg-do compile } + +// Origin: priesnit@math.uni-goettingen.de + +// PR c++/5767: ICE parsing typename with invalid scope. + +template