From 62ddb05da370e8272987c359ebb48c8e50c37e13 Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Wed, 8 Jun 2005 11:26:05 +0000 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 5 ++++- gcc/testsuite/ChangeLog | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) 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 -- 2.47.2