diff options
author | Richard Guenther <rguenther@suse.de> | 2008-02-04 13:30:00 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-02-04 13:30:00 +0000 |
commit | 1a1640dbb3257532e6d3603c78a5f379f7682dc3 (patch) | |
tree | b1938020726622d9ccc2baa489b6201c3da96fbb /gcc | |
parent | 0fcedd9c98d1f9f880b59b979b77f4db4d9eb391 (diff) | |
download | gcc-1a1640dbb3257532e6d3603c78a5f379f7682dc3.zip gcc-1a1640dbb3257532e6d3603c78a5f379f7682dc3.tar.gz gcc-1a1640dbb3257532e6d3603c78a5f379f7682dc3.tar.bz2 |
re PR middle-end/35043 (ICE in tree-data-ref because signed_type_for_types returns NULL)
2008-02-04 Richard Guenther <rguenther@suse.de>
PR middle-end/35043
* gimplify.c (gimplify_init_ctor_eval): Convert array indices
to TYPE_DOMAINs base type instead of using bitsizetype here.
* gcc.c-torture/compile/pr35043.c: New testcase.
From-SVN: r132091
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimplify.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr35043.c | 20 |
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 089f82f..1665f9e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-02-04 Richard Guenther <rguenther@suse.de> + + PR middle-end/35043 + * gimplify.c (gimplify_init_ctor_eval): Convert array indices + to TYPE_DOMAINs base type instead of using bitsizetype here. + 2008-02-03 Jason Merrill <jason@redhat.com> * print-tree.c (print_node) [CONSTRUCTOR]: Print elements. diff --git a/gcc/gimplify.c b/gcc/gimplify.c index fe70847..04ed39c 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -3096,6 +3096,10 @@ gimplify_init_ctor_eval (tree object, VEC(constructor_elt,gc) *elts, if (array_elt_type) { + /* Do not use bitsizetype for ARRAY_REF indices. */ + if (TYPE_DOMAIN (TREE_TYPE (object))) + purpose = fold_convert (TREE_TYPE (TYPE_DOMAIN (TREE_TYPE (object))), + purpose); cref = build4 (ARRAY_REF, array_elt_type, unshare_expr (object), purpose, NULL_TREE, NULL_TREE); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1490a37..1be9baf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-02-04 Richard Guenther <rguenther@suse.de> + + PR middle-end/35043 + * gcc.c-torture/compile/pr35043.c: New testcase. + 2008-02-03 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> * g++.dg/tree-ssa/ivopts-1.C: Remove xfail for hppa*-*-*. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr35043.c b/gcc/testsuite/gcc.c-torture/compile/pr35043.c new file mode 100644 index 0000000..29c6852 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr35043.c @@ -0,0 +1,20 @@ +typedef long unsigned int size_t; +typedef struct { + long double dat[2]; +} gsl_complex_long_double; +typedef struct { + size_t size; + size_t stride; + long double *data; +} gsl_vector_complex_long_double; +void gsl_vector_complex_long_double_set_zero (gsl_vector_complex_long_double * v) +{ + long double * const data = v->data; + const size_t n = v->size; + const size_t stride = v->stride; + const gsl_complex_long_double zero = { { 0.0L,0.0L} } ; + size_t i; + for (i = 0; i < n; i++) + *(gsl_complex_long_double *) (data + 2 * i * stride) = zero; +} + |