The following fixes non-GIMPLE constructors slipping through the gimplifier.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied. Richard. 2014-09-22 Richard Biener <rguent...@suse.de> * gimplify.c (gimplify_init_constructor): Do not leave non-GIMPLE vector constructors around. * tree-cfg.c (verify_gimple_assign_single): Verify that CONSTRUCTORs have gimple elements. Index: gcc/gimplify.c =================================================================== --- gcc/gimplify.c (revision 215450) +++ gcc/gimplify.c (working copy) @@ -4021,12 +4021,6 @@ gimplify_init_constructor (tree *expr_p, break; } - /* Don't reduce an initializer constant even if we can't - make a VECTOR_CST. It won't do anything for us, and it'll - prevent us from representing it as a single constant. */ - if (initializer_constant_valid_p (ctor, type)) - break; - TREE_CONSTANT (ctor) = 0; } Index: gcc/tree-cfg.c =================================================================== --- gcc/tree-cfg.c (revision 215450) +++ gcc/tree-cfg.c (working copy) @@ -4207,8 +4233,20 @@ verify_gimple_assign_single (gimple stmt debug_generic_stmt (rhs1); return true; } + if (!is_gimple_val (elt_v)) + { + error ("vector CONSTRUCTOR element is not a GIMPLE value"); + debug_generic_stmt (rhs1); + return true; + } } } + else if (CONSTRUCTOR_NELTS (rhs1) != 0) + { + error ("non-vector CONSTRUCTOR with elements"); + debug_generic_stmt (rhs1); + return true; + } return res; case OBJ_TYPE_REF: case ASSERT_EXPR: