From eb8f1123d9a6e25c288cac5a34e050c5292fd5b6 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Wed, 5 Oct 2011 09:31:40 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 8 ++++++++ gcc/gimple-fold.c | 7 +++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9147e87c1888..21910f23a675 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 f8e5035e2970..179535ef5667 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); -- 2.47.3