From: Richard Biener Date: Fri, 15 Oct 2021 06:52:08 +0000 (+0200) Subject: c/102763 - fix ICE with invalid input to GIMPLE FE X-Git-Tag: basepoints/gcc-13~3882 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17ffb7a562061c54eb6eb9863271524568761cf6;p=thirdparty%2Fgcc.git c/102763 - fix ICE with invalid input to GIMPLE FE This fixes an ICE for the failure to verify we're dereferencing a pointer before throwing that at build_simple_mem_ref. 2021-10-15 Richard Biener PR c/102763 gcc/c/ * gimple-parser.c (c_parser_gimple_postfix_expression_after_primary): Check for a pointer do be dereferenced by ->. gcc/testsuite/ * gcc.dg/gimplefe-error-12.c: New testcase. --- diff --git a/gcc/c/gimple-parser.c b/gcc/c/gimple-parser.c index c43ee38a2cfd..f3d99355a8eb 100644 --- a/gcc/c/gimple-parser.c +++ b/gcc/c/gimple-parser.c @@ -1817,6 +1817,14 @@ c_parser_gimple_postfix_expression_after_primary (gimple_parser &parser, case CPP_DEREF: { /* Structure element reference. */ + if (!POINTER_TYPE_P (TREE_TYPE (expr.value))) + { + c_parser_error (parser, "dereference of non-pointer"); + expr.set_error (); + expr.original_code = ERROR_MARK; + expr.original_type = NULL; + return expr; + } c_parser_consume_token (parser); if (c_parser_next_token_is (parser, CPP_NAME)) { diff --git a/gcc/testsuite/gcc.dg/gimplefe-error-12.c b/gcc/testsuite/gcc.dg/gimplefe-error-12.c new file mode 100644 index 000000000000..981ff7ba499e --- /dev/null +++ b/gcc/testsuite/gcc.dg/gimplefe-error-12.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-fgimple" } */ + +int get_current (); + +__GIMPLE +void foo() +{ + get_current()->flags; /* { dg-error "non-pointer" } */ +}