From 07453ba1bf0b1290cef54dcb028cb477b17966df Mon Sep 17 00:00:00 2001 From: Mikhail Maltsev Date: Fri, 24 Feb 2017 13:09:10 +0300 Subject: [PATCH 1/5] GIMPLEFE: handle missing labels in goto statements --- gcc/c/gimple-parser.c | 10 ++++++++++ gcc/testsuite/gcc.dg/gimplefe-error-4.c | 7 +++++++ gcc/testsuite/gcc.dg/gimplefe-error-5.c | 9 +++++++++ 3 files changed, 26 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/gimplefe-error-4.c create mode 100644 gcc/testsuite/gcc.dg/gimplefe-error-5.c diff --git a/gcc/c/gimple-parser.c b/gcc/c/gimple-parser.c index 0d6384b..a99b502 100644 --- a/gcc/c/gimple-parser.c +++ b/gcc/c/gimple-parser.c @@ -1315,6 +1315,11 @@ c_parser_gimple_if_stmt (c_parser *parser, gimple_seq *seq) loc = c_parser_peek_token (parser)->location; c_parser_consume_token (parser); label = c_parser_peek_token (parser)->value; + if (! label) + { + c_parser_error (parser, "expected label"); + return; + } t_label = lookup_label_for_goto (loc, label); c_parser_consume_token (parser); if (! c_parser_require (parser, CPP_SEMICOLON, "expected %<;%>")) @@ -1339,6 +1344,11 @@ c_parser_gimple_if_stmt (c_parser *parser, gimple_seq *seq) loc = c_parser_peek_token (parser)->location; c_parser_consume_token (parser); label = c_parser_peek_token (parser)->value; + if (! label) + { + c_parser_error (parser, "expected label"); + return; + } f_label = lookup_label_for_goto (loc, label); c_parser_consume_token (parser); if (! c_parser_require (parser, CPP_SEMICOLON, "expected %<;%>")) diff --git a/gcc/testsuite/gcc.dg/gimplefe-error-4.c b/gcc/testsuite/gcc.dg/gimplefe-error-4.c new file mode 100644 index 0000000..c61539c --- /dev/null +++ b/gcc/testsuite/gcc.dg/gimplefe-error-4.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { dg-options "-fgimple" } */ + +__GIMPLE() void fn1() { + if (1) + goto +} /* { dg-error "expected label" } */ diff --git a/gcc/testsuite/gcc.dg/gimplefe-error-5.c b/gcc/testsuite/gcc.dg/gimplefe-error-5.c new file mode 100644 index 0000000..7398861 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gimplefe-error-5.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-fgimple" } */ + +__GIMPLE() void fn1() { + if (1) + goto lbl; + else + goto +} /* { dg-error "expected label" } */ -- 2.1.4