http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54363
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-08-24 09:08:09 UTC --- --- gimplify.c.jj 2012-08-15 10:55:33.000000000 +0200 +++ gimplify.c 2012-08-24 11:01:55.253815273 +0200 @@ -3857,7 +3857,8 @@ optimize_compound_literals_in_ctor (tree if (!TREE_ADDRESSABLE (value) && !TREE_ADDRESSABLE (decl) - && init) + && init + && TREE_CODE (init) == CONSTRUCTOR) newval = optimize_compound_literals_in_ctor (init); } if (newval == value) fixes the ICE, we end up with b.a = (char **) "a".