PR c/23722 bad error recovery with if blocks and else (try 3)
Joseph S. Myers
joseph@codesourcery.com
Mon Nov 26 18:52:00 GMT 2007
On Fri, 23 Nov 2007, Manuel López-Ibáñez wrote:
> 2007-11-23 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
>
> PR c/23722
> * c-parser.c (struct c_parser): New bit in_if_block.
> (c_parser_compound_statement_nostart): Handle unexpected 'else' keyword.
> (c_parser_statement_after_labels): Set in_if_block to false while parsing.
> (c_parser_if_body): Don't call c_parser_statement_after_labels if a
> semicolon is found, just consume it. Don't call
> c_parser_statement_after_labels if an open brace is found, call
> c_parser_compound_statement instead.
> (c_parser_else_body): New.
> (c_parser_if_statement): Set in_if_block to true when parsing the
> body of the 'if' statement. Use c_parser_else_body.
>
> testsuite/
> * gcc.dg/cpp/19990413-1.c: Update.
> * gcc.dg/parse-else-error.c: New.
> * gcc.dg/parse-else-error-2.c: New.
> * gcc.dg/parse-else-error-3.c: New.
> * gcc.dg/parse-else-error-4.c: New.
OK.
--
Joseph S. Myers
joseph@codesourcery.com
More information about the Gcc-patches
mailing list