re PR tree-optimization/77697 (suspicious code in tree-ssa-forwprop.c)
authorRichard Biener <rguenther@suse.de>
Thu, 22 Sep 2016 12:16:42 +0000 (12:16 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 22 Sep 2016 12:16:42 +0000 (12:16 +0000)
2016-09-22  Richard Biener  <rguenther@suse.de>

PR middle-end/77697
* gimple-fold.c (fold_array_ctor_reference): Turn asserts into
fold fails.

From-SVN: r240353

gcc/ChangeLog
gcc/gimple-fold.c

index 3bd4139b3b570f6658acb7c7004b543f70ad17d7..c2b4470aef1f42d1e99a71b85ed362499c12c96d 100644 (file)
@@ -1,3 +1,9 @@
+2016-09-22  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/77697
+       * gimple-fold.c (fold_array_ctor_reference): Turn asserts into
+       fold fails.
+
 2016-09-22  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/77677
index addabb745efc73465f313d1d591aea383f7f4a13..23e4516e02039035c814334c1d8ef2f002bbe724 100644 (file)
@@ -5647,14 +5647,15 @@ fold_array_ctor_reference (tree type, tree ctor,
   if (domain_type && TYPE_MIN_VALUE (domain_type))
     {
       /* Static constructors for variably sized objects makes no sense.  */
-      gcc_assert (TREE_CODE (TYPE_MIN_VALUE (domain_type)) == INTEGER_CST);
+      if (TREE_CODE (TYPE_MIN_VALUE (domain_type)) != INTEGER_CST)
+       return NULL_TREE;
       low_bound = wi::to_offset (TYPE_MIN_VALUE (domain_type));
     }
   else
     low_bound = 0;
   /* Static constructors for variably sized objects makes no sense.  */
-  gcc_assert (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor))))
-             == INTEGER_CST);
+  if (TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor)))) != INTEGER_CST)
+    return NULL_TREE;
   elt_size = wi::to_offset (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (ctor))));
 
   /* We can handle only constantly sized accesses that are known to not