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();