From: Jakub Jelinek Date: Wed, 3 Apr 2013 17:56:12 +0000 (+0200) Subject: backport: re PR c/54363 (ICE when compiling malformed struct initializers) X-Git-Tag: releases/gcc-4.6.4~69 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3fd17365de85bbfd005338e5b6f854e9ab79045f;p=thirdparty%2Fgcc.git backport: re PR c/54363 (ICE when compiling malformed struct initializers) Backported from mainline 2012-08-24 Jakub Jelinek PR c/54363 * gimplify.c (optimize_compound_literals_in_ctor): Only recurse if init is a CONSTRUCTOR. * gcc.dg/pr54363.c: New test. From-SVN: r197443 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3f20bcd1f9f4..641bd65aa563 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2013-04-03 Jakub Jelinek Backported from mainline + 2012-08-24 Jakub Jelinek + + PR c/54363 + * gimplify.c (optimize_compound_literals_in_ctor): Only recurse + if init is a CONSTRUCTOR. + 2012-05-03 Jakub Jelinek PR debug/53174 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 50cfc45ea0b0..1af6de61bc22 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -3646,7 +3646,8 @@ optimize_compound_literals_in_ctor (tree orig_ctor) if (!TREE_ADDRESSABLE (value) && !TREE_ADDRESSABLE (decl) - && init) + && init + && TREE_CODE (init) == CONSTRUCTOR) newval = optimize_compound_literals_in_ctor (init); } if (newval == value) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d6802836494f..d51c2564e678 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2013-04-03 Jakub Jelinek Backported from mainline + 2012-08-24 Jakub Jelinek + + PR c/54363 + * gcc.dg/pr54363.c: New test. + 2012-05-03 Jakub Jelinek PR debug/53174 diff --git a/gcc/testsuite/gcc.dg/pr54363.c b/gcc/testsuite/gcc.dg/pr54363.c new file mode 100644 index 000000000000..aea0f9057b08 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr54363.c @@ -0,0 +1,12 @@ +/* PR c/54363 */ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99" } */ + +struct S { char **a; }; + +void +test (void) +{ + struct S b = { .a = (char **) { "a", "b" } }; /* { dg-warning "(initialization|excess elements)" } */ + struct S c = { .a = (char *[]) { "a", "b" } }; +}