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:

Reply via email to