From: Richard Guenther Date: Wed, 9 Jan 2008 14:17:13 +0000 (+0000) Subject: re PR tree-optimization/34458 (ICE in int_cst_value, at tree.c:8047 at -O3) X-Git-Tag: releases/gcc-4.3.0~679 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=def49dd7ca01bdeea7cf61c90da4206609e65ce5;p=thirdparty%2Fgcc.git re PR tree-optimization/34458 (ICE in int_cst_value, at tree.c:8047 at -O3) 2008-01-09 Richard Guenther PR middle-end/34458 * tree-data-ref.c (initialize_matrix_A): Use tree_low_cst, adjust return type. * gcc.c-torture/compile/pr34458.c: New testcase. From-SVN: r131429 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f4ff71b28159..acfca73d9e81 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-01-09 Richard Guenther + + PR middle-end/34458 + * tree-data-ref.c (initialize_matrix_A): Use tree_low_cst, + adjust return type. + 2008-01-09 Richard Guenther PR middle-end/34679 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e2b6281f40f..78f54391a06f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-09 Richard Guenther + + PR middle-end/34458 + * gcc.c-torture/compile/pr34458.c: New testcase. + 2008-01-08 John David Anglin PR testsuite/30459 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr34458.c b/gcc/testsuite/gcc.c-torture/compile/pr34458.c new file mode 100644 index 000000000000..096cc0c9b89e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr34458.c @@ -0,0 +1,16 @@ +/* Testcase by Martin Michlmayr */ + +typedef struct +{ + int data[1024]; +} +Lint; +Lint lint_operate (Lint a, long long ammount) +{ + int index; + Lint ret; + for (index = 0; index < 24; index++) + ret.data[index] = + a.data[index + ammount / 32 + 1] << a.data[index + ammount / 32]; + return ret; +} diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index 88f6347f777d..e4ac89a67b07 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -1820,15 +1820,24 @@ analyze_siv_subscript_cst_affine (tree chrec_a, /* Helper recursive function for initializing the matrix A. Returns the initial value of CHREC. */ -static int +static HOST_WIDE_INT initialize_matrix_A (lambda_matrix A, tree chrec, unsigned index, int mult) { + tree type; + gcc_assert (chrec); + type = TREE_TYPE (chrec); if (TREE_CODE (chrec) != POLYNOMIAL_CHREC) - return int_cst_value (chrec); - - A[index][0] = mult * int_cst_value (CHREC_RIGHT (chrec)); + return tree_low_cst (chrec, TYPE_UNSIGNED (type) + && !(TREE_CODE (type) == INTEGER_TYPE + && TYPE_IS_SIZETYPE (type))); + + type = TREE_TYPE (CHREC_RIGHT (chrec)); + A[index][0] = mult * tree_low_cst (CHREC_RIGHT (chrec), + TYPE_UNSIGNED (type) + && !(TREE_CODE (type) == INTEGER_TYPE + && TYPE_IS_SIZETYPE (type))); return initialize_matrix_A (A, CHREC_LEFT (chrec), index + 1, mult); }