From 9fc5e7a4430d16742e4cb910f0dbb26460cee50e Mon Sep 17 00:00:00 2001 From: Mikhail Maltsev Date: Wed, 31 May 2017 13:47:51 +0000 Subject: GIMPLEFE: Handle missing labels in goto statements gcc/c/ PR testsuite/80580 * gimple-parser.c (c_parser_gimple_if_stmt): Check for empty labels. gcc/testsuite/ PR testsuite/80580 * gcc.dg/gimplefe-error-7.c: New test. From-SVN: r248738 --- gcc/c/ChangeLog | 5 +++++ gcc/c/gimple-parser.c | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'gcc/c') diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 2fa3984..c53a4bf 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,8 @@ +2017-05-31 Mikhail Maltsev + + PR testsuite/80580 + * gimple-parser.c (c_parser_gimple_if_stmt): Check for empty labels. + 2017-05-30 David Malcolm * c-objc-common.c (c_tree_printer): Gain bool and const char ** diff --git a/gcc/c/gimple-parser.c b/gcc/c/gimple-parser.c index 06f2fdb..fb9a543 100644 --- a/gcc/c/gimple-parser.c +++ b/gcc/c/gimple-parser.c @@ -1335,9 +1335,14 @@ c_parser_gimple_if_stmt (c_parser *parser, gimple_seq *seq) { loc = c_parser_peek_token (parser)->location; c_parser_consume_token (parser); + if (! c_parser_next_token_is (parser, CPP_NAME)) + { + c_parser_error (parser, "expected label"); + return; + } label = c_parser_peek_token (parser)->value; - t_label = lookup_label_for_goto (loc, label); c_parser_consume_token (parser); + t_label = lookup_label_for_goto (loc, label); if (! c_parser_require (parser, CPP_SEMICOLON, "expected %<;%>")) return; } @@ -1359,6 +1364,11 @@ c_parser_gimple_if_stmt (c_parser *parser, gimple_seq *seq) { loc = c_parser_peek_token (parser)->location; c_parser_consume_token (parser); + if (! c_parser_next_token_is (parser, CPP_NAME)) + { + c_parser_error (parser, "expected label"); + return; + } label = c_parser_peek_token (parser)->value; f_label = lookup_label_for_goto (loc, label); c_parser_consume_token (parser); -- cgit v1.1