diff options
author | Richard Biener <rguenther@suse.de> | 2016-09-22 12:16:42 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-09-22 12:16:42 +0000 |
commit | 9ef2eff0d40fb59ee7538148fc8eb25088777297 (patch) | |
tree | 780b38bd2bac90111b2a475dc108d206c07874aa /gcc/gimple-fold.c | |
parent | 1f3131cb1e238fa37d0fedb8d5b05761c3dbfef6 (diff) | |
download | gcc-9ef2eff0d40fb59ee7538148fc8eb25088777297.zip gcc-9ef2eff0d40fb59ee7538148fc8eb25088777297.tar.gz gcc-9ef2eff0d40fb59ee7538148fc8eb25088777297.tar.bz2 |
re PR tree-optimization/77697 (suspicious code in tree-ssa-forwprop.c)
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
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r-- | gcc/gimple-fold.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index addabb7..23e4516 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -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 |