aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-02-04 13:30:00 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-02-04 13:30:00 +0000
commit1a1640dbb3257532e6d3603c78a5f379f7682dc3 (patch)
treeb1938020726622d9ccc2baa489b6201c3da96fbb /gcc
parent0fcedd9c98d1f9f880b59b979b77f4db4d9eb391 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/gimplify.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr35043.c20
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;
+}
+