diff mbox

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

Message ID 20160728131918.GE7007@redhat.com
State New
Headers show

Commit Message

Marek Polacek July 28, 2016, 1:19 p.m. UTC
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.


	Marek

Comments

Bernd Schmidt July 29, 2016, 11:17 a.m. UTC | #1
On 07/28/2016 03:19 PM, Marek Polacek wrote:
> 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.

Ok, I think.


Bernd
diff mbox

Patch

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" } */
+}