From: Richard Guenther Date: Wed, 5 Oct 2011 09:31:40 +0000 (+0000) Subject: re PR middle-end/50609 (FAIL: gcc.c-torture/execute/pr23135.c compilation, -O2 ... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=eb8f1123d9a6e25c288cac5a34e050c5292fd5b6;p=gcc.git re PR middle-end/50609 (FAIL: gcc.c-torture/execute/pr23135.c compilation, -O2 -flto (ICE)) 2011-10-05 Richard Guenther PR tree-optimization/50609 * gimple-fold.c (fold_array_ctor_reference): Also handle vector typed constructors. (fold_ctor_reference): Dispatch to fold_array_ctor_reference for vector typed constructors. From-SVN: r179540 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9147e87c188..21910f23a67 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2011-10-05 Richard Guenther + + PR tree-optimization/50609 + * gimple-fold.c (fold_array_ctor_reference): Also handle + vector typed constructors. + (fold_ctor_reference): Dispatch to fold_array_ctor_reference + for vector typed constructors. + 2011-10-05 Uros Bizjak * config/i386/i386.c (ix86_emit_binop): New static function. diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index f8e5035e297..179535ef566 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -2747,10 +2747,12 @@ fold_array_ctor_reference (tree type, tree ctor, double_int low_bound, elt_size; double_int index, max_index; double_int access_index; - tree domain_type = TYPE_DOMAIN (TREE_TYPE (ctor)); + tree domain_type = NULL_TREE; HOST_WIDE_INT inner_offset; /* Compute low bound and elt size. */ + if (TREE_CODE (TREE_TYPE (ctor)) == ARRAY_TYPE) + domain_type = TYPE_DOMAIN (TREE_TYPE (ctor)); if (domain_type && TYPE_MIN_VALUE (domain_type)) { /* Static constructors for variably sized objects makes no sense. */ @@ -2917,7 +2919,8 @@ fold_ctor_reference (tree type, tree ctor, unsigned HOST_WIDE_INT offset, if (TREE_CODE (ctor) == CONSTRUCTOR) { - if (TREE_CODE (TREE_TYPE (ctor)) == ARRAY_TYPE) + if (TREE_CODE (TREE_TYPE (ctor)) == ARRAY_TYPE + || TREE_CODE (TREE_TYPE (ctor)) == VECTOR_TYPE) return fold_array_ctor_reference (type, ctor, offset, size); else return fold_nonarray_ctor_reference (type, ctor, offset, size);