C PATCH for c/71583 (ICE with bogus compound literal)

Marek Polacek polacek@redhat.com
Thu Jul 28 13:19:00 GMT 2016


Since r157233, build_compound_literal will return error_mark_node for
erroneous initializers of compound literals.  This caused an ICE in
c_parser_postfix_expression_after_paren_type because the code dealing
with evaluating variably modified types wasn't prepared for expr.value
being error_mark_node.  Fixed thus.

Bootstrapped/regtested on x86_64-linux, ok for trunk?

2016-07-28  Marek Polacek  <polacek@redhat.com>

	PR c/71583
	* c-parser.c (c_parser_postfix_expression_after_paren_type): Also
	check expr.value.

	* gcc.dg/noncompile/pr71583.c: New test.

diff --git gcc/c/c-parser.c gcc/c/c-parser.c
index 8952bca..a86cae2 100644
--- gcc/c/c-parser.c
+++ gcc/c/c-parser.c
@@ -8232,7 +8232,9 @@ c_parser_postfix_expression_after_paren_type (c_parser *parser,
   set_c_expr_source_range (&expr, init.src_range);
   expr.original_code = ERROR_MARK;
   expr.original_type = NULL;
-  if (type != error_mark_node && type_expr)
+  if (type != error_mark_node
+      && expr.value != error_mark_node
+      && type_expr)
     {
       if (TREE_CODE (expr.value) == C_MAYBE_CONST_EXPR)
 	{
diff --git gcc/testsuite/gcc.dg/noncompile/pr71583.c gcc/testsuite/gcc.dg/noncompile/pr71583.c
index e69de29..5045b88 100644
--- gcc/testsuite/gcc.dg/noncompile/pr71583.c
+++ gcc/testsuite/gcc.dg/noncompile/pr71583.c
@@ -0,0 +1,11 @@
+/* PR c/71583 */
+/* { dg-do compile } */
+
+void
+f (int i)
+{
+  (int (*)[++i]) { int }; /* { dg-error "expected" } */
+  (int (*)[++i]) { }; /* { dg-error "empty" } */
+  (int (*)[++i]) { , }; /* { dg-error "expected" } */
+  (int (*)[++i]) { f () }; /* { dg-error "too few" } */
+}

	Marek



More information about the Gcc-patches mailing list