Hi, The attached patch tries fix ICE due to undeclared variable(s) in the input. Successfully bootstrapped on x86_64-pc-linux-gnu, testing is in progress
Thanks, Prasad
Changelog
Description: Binary data
diff --git a/gcc/c/gimple-parser.c b/gcc/c/gimple-parser.c
index b7cef93..13bf2b1 100644
--- a/gcc/c/gimple-parser.c
+++ b/gcc/c/gimple-parser.c
@@ -516,7 +516,9 @@ c_parser_gimple_binary_expression (c_parser *parser)
rhs = c_parser_gimple_postfix_expression (parser);
if (c_parser_error (parser))
return ret;
- ret.value = build2_loc (ret_loc, code, ret_type, lhs.value, rhs.value);
+
+ if (lhs.value != error_mark_node && rhs.value != error_mark_node)
+ ret.value = build2_loc (ret_loc, code, ret_type, lhs.value, rhs.value);
return ret;
}
@@ -653,7 +655,7 @@ c_parser_parse_ssa_name (c_parser *parser,
id = get_identifier (var_name);
tree parent = lookup_name (id);
XDELETEVEC (var_name);
- if (! parent)
+ if (! parent || parent == error_mark_node)
{
c_parser_error (parser, "base variable or SSA name not declared");
return error_mark_node;
@@ -1194,6 +1196,8 @@ c_parser_gimple_if_stmt (c_parser *parser, gimple_seq *seq)
location_t loc;
c_parser_consume_token (parser);
tree cond = c_parser_gimple_paren_condition (parser);
+ if (cond == error_mark_node)
+ return;
if (c_parser_next_token_is_keyword (parser, RID_GOTO))
{
@@ -1252,7 +1256,7 @@ c_parser_gimple_if_stmt (c_parser *parser, gimple_seq *seq)
static void
c_parser_gimple_switch_stmt (c_parser *parser, gimple_seq *seq)
{
- c_expr cond_expr;
+ tree cond = error_mark_node;
tree case_label, label;
auto_vec<tree> labels;
tree default_label = NULL_TREE;
@@ -1261,9 +1265,11 @@ c_parser_gimple_switch_stmt (c_parser *parser, gimple_seq *seq)
if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
{
- cond_expr = c_parser_gimple_postfix_expression (parser);
+ cond = c_parser_gimple_postfix_expression (parser).value;
if (! c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
return;
+ if (cond == error_mark_node)
+ return;
}
if (c_parser_require (parser, CPP_OPEN_BRACE, "expected %<{%>"))
@@ -1374,7 +1380,7 @@ c_parser_gimple_switch_stmt (c_parser *parser, gimple_seq *seq)
}
if (! c_parser_require (parser, CPP_CLOSE_BRACE, "expected %<}%>"))
return;
- gimple_seq_add_stmt (seq, gimple_build_switch (cond_expr.value,
+ gimple_seq_add_stmt (seq, gimple_build_switch (cond,
default_label, labels));
gimple_seq_add_seq (seq, switch_body);
labels.release();
