From: Volker Reichelt Date: Wed, 8 Jun 2005 11:26:05 +0000 (+0000) Subject: re PR c++/20563 (Infinite loop in diagnostic (and ice after error message)) X-Git-Tag: releases/gcc-3.4.5~378 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=62ddb05da370e8272987c359ebb48c8e50c37e13;p=thirdparty%2Fgcc.git re PR c++/20563 (Infinite loop in diagnostic (and ice after error message)) PR c++/20563 * parser.c (cp_parser_label_declaration): Deal with invalid/missing identifiers. * g++.dg/ext/label4.C: New test. From-SVN: r100756 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index bd8c19605487..6853265500a2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-06-08 Volker Reichelt + + PR c++/20563 + * parser.c (cp_parser_label_declaration): Deal with invalid/missing + identifiers. + 2005-06-03 Mark Mitchell PR c++/21853 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index fb0d1e305130..8765ff10e69e 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -13639,7 +13639,10 @@ cp_parser_label_declaration (cp_parser* parser) /* Look for an identifier. */ identifier = cp_parser_identifier (parser); - /* Declare it as a lobel. */ + /* If we failed, stop. */ + if (identifier == error_mark_node) + break; + /* Declare it as a label. */ finish_label_decl (identifier); /* If the next token is a `;', stop. */ if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ac6e72a4925b..728824453a10 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-06-08 Volker Reichelt + + PR c++/20563 + * g++.dg/ext/label4.C: New test. + 2005-06-03 Mark Mitchell PR c++/21853