Commit 351f85c5 by Jakub Jelinek Committed by Jakub Jelinek

c-parser.c (c_parser_switch_statement): Add IF_P argument, parse it through to…

c-parser.c (c_parser_switch_statement): Add IF_P argument, parse it through to c_parser_c99_block_statement.

	* c-parser.c (c_parser_switch_statement): Add IF_P argument,
	parse it through to c_parser_c99_block_statement.
	(c_parser_statement_after_labels): Adjust c_parser_switch_statement
	caller.

	* parser.c (cp_parser_selection_statement): For RID_SWITCH,
	pass if_p instead of NULL to cp_parser_implicitly_scoped_statement.

	* c-c++-common/Wdangling-else-4.c: New test.

From-SVN: r235920
parent f5c40ce2
2016-05-05 Jakub Jelinek <jakub@redhat.com>
* c-parser.c (c_parser_switch_statement): Add IF_P argument,
parse it through to c_parser_c99_block_statement.
(c_parser_statement_after_labels): Adjust c_parser_switch_statement
caller.
2016-05-04 Marek Polacek <polacek@redhat.com>
* c-parser.c (c_parser_if_statement): Replace OPT_Wparentheses with
......
......@@ -1305,7 +1305,7 @@ static void c_parser_statement (c_parser *, bool *);
static void c_parser_statement_after_labels (c_parser *, bool *,
vec<tree> * = NULL);
static void c_parser_if_statement (c_parser *, bool *, vec<tree> *);
static void c_parser_switch_statement (c_parser *);
static void c_parser_switch_statement (c_parser *, bool *);
static void c_parser_while_statement (c_parser *, bool, bool *);
static void c_parser_do_statement (c_parser *, bool);
static void c_parser_for_statement (c_parser *, bool, bool *);
......@@ -5138,7 +5138,7 @@ c_parser_statement_after_labels (c_parser *parser, bool *if_p,
c_parser_if_statement (parser, if_p, chain);
break;
case RID_SWITCH:
c_parser_switch_statement (parser);
c_parser_switch_statement (parser, if_p);
break;
case RID_WHILE:
c_parser_while_statement (parser, false, if_p);
......@@ -5570,7 +5570,7 @@ c_parser_if_statement (c_parser *parser, bool *if_p, vec<tree> *chain)
*/
static void
c_parser_switch_statement (c_parser *parser)
c_parser_switch_statement (c_parser *parser, bool *if_p)
{
struct c_expr ce;
tree block, expr, body, save_break;
......@@ -5605,7 +5605,7 @@ c_parser_switch_statement (c_parser *parser)
c_start_case (switch_loc, switch_cond_loc, expr, explicit_cast_p);
save_break = c_break_label;
c_break_label = NULL_TREE;
body = c_parser_c99_block_statement (parser, NULL/*if??*/);
body = c_parser_c99_block_statement (parser, if_p);
c_finish_case (body, ce.original_type);
if (c_break_label)
{
......
2016-05-05 Jakub Jelinek <jakub@redhat.com>
* parser.c (cp_parser_selection_statement): For RID_SWITCH,
pass if_p instead of NULL to cp_parser_implicitly_scoped_statement.
2016-05-04 Marek Polacek <polacek@redhat.com>
* parser.c (cp_parser_selection_statement): Replace OPT_Wparentheses
......
......@@ -10978,7 +10978,7 @@ cp_parser_selection_statement (cp_parser* parser, bool *if_p,
in_statement = parser->in_statement;
parser->in_switch_statement_p = true;
parser->in_statement |= IN_SWITCH_STMT;
cp_parser_implicitly_scoped_statement (parser, NULL,
cp_parser_implicitly_scoped_statement (parser, if_p,
guard_tinfo);
parser->in_switch_statement_p = in_switch_statement_p;
parser->in_statement = in_statement;
2016-05-05 Jakub Jelinek <jakub@redhat.com>
* c-c++-common/Wdangling-else-4.c: New test.
2016-05-04 Jakub Jelinek <jakub@redhat.com>
PR c++/70906
......
/* { dg-do compile } */
/* { dg-options "-Wdangling-else" } */
void bar (int);
void
foo (int a, int b, int c)
{
if (a) /* { dg-warning "suggest explicit braces to avoid ambiguous .else." } */
switch (b)
case 0:
if (c)
bar (1);
else
bar (2);
}
void
baz (int a, int b, int c)
{
if (a)
switch (b)
{
case 0:
if (c)
bar (1);
}
else
bar (2);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment