https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77450
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|ice-on-valid-code |ice-on-invalid-code Status|UNCONFIRMED |NEW Last reconfirmed| |2016-09-02 CC| |jsm28 at gcc dot gnu.org, | |rguenth at gcc dot gnu.org Target Milestone|--- |5.5 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- The FE creates (on trunk) VIEW_CONVERT_EXPR<int[1]>(<<< Unknown tree: compound_literal_expr V D.1794 = { 0 }; >>>)[0] = 0; which is gimplified to foo () { V D.1794; D.1794 = { 0 }; BIT_FIELD_REF <D.1794, 32, 0> = 0; the issue is that D.1794 is marked as DECL_GIMPLE_REG_P but that is bougs (and shows after into-SSA). I believe the testcase is invalid and ought to be rejected - you can't write to {}. Breakpoint 5, convert_vector_to_array_for_subscript (loc=180896, vecp=0x7fffffffcef0, index=<integer_cst 0x7ffff68a4048>) at /space/rguenther/src/svn/trunk/gcc/c-family/c-common.c:12711 (gdb) p debug_generic_expr (*vecp) <<< Unknown tree: compound_literal_expr V D.1794 = { 0 }; >>> $1 = void (gdb) n 12712 ret = !lvalue_p (*vecp); (gdb) 12714 if (TREE_CODE (index) == INTEGER_CST) (gdb) p ret $2 = false so it looks like COMPOUND_LITERAL_EXPR is an lvalue? Do we need to handle COMPOUND_LITERAL_EXPR by emitting a COMPOUND_EXPR with the second stmt operating on DECL_EXPR_DECL (COMPOUND_LITERAL_EXPR_DECL_EXPR (*vecp))? Or is the error on the gimplification side (in setting DECL_GIMPLE_REG_P)? Which would mean that eventually c_common_mark_addressable_vec doesn't handle COMPOUND_LITERAL_EXPR correctly.