https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90474
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- OK, so this shows a deeper issue with gimplification which either prematurely marks decls as DECL_GIMPLE_REG_P in gimplify_bind_expr or variables as TREE_ADDRESSABLE too late in gimplify_compound_literal_expr. The testcase itself is fixed with Index: gcc/gimplify.c =================================================================== --- gcc/gimplify.c (revision 271155) +++ gcc/gimplify.c (working copy) @@ -4659,7 +4659,12 @@ gimplify_compound_literal_expr (tree *ex expression is addressable now, otherwise it is marked too late after we gimplify the initialization expression. */ if (TREE_ADDRESSABLE (*expr_p)) - TREE_ADDRESSABLE (decl) = 1; + { + TREE_ADDRESSABLE (decl) = 1; + if (VECTOR_TYPE_P (TREE_TYPE (decl)) + || TREE_CODE (TREE_TYPE (decl)) == COMPLEX_TYPE) + DECL_GIMPLE_REG_P (decl) = 0; + } /* Otherwise, if we don't need an lvalue and have a literal directly substitute it. Check if it matches the gimple predicate, as otherwise we'd generate a new temporary, and we can as well just but of course any earlier reliance of gimplifications on the DECL_GIMPLE_REG_P check (and reliance on !TREE_ADDRESSABLE) may cause bogus gimplified IL. Thus the above setting of TREE_ADDRESSABLE should probably be an assert instead and the one building the COMPOUND_LITERAL (or the one setting TREE_ADDRESSABLE on it) should also mark the decl so.