diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr34458.c | 16 | ||||
-rw-r--r-- | gcc/tree-data-ref.c | 17 |
4 files changed, 40 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f4ff71b..acfca73 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2008-01-09 Richard Guenther <rguenther@suse.de> + PR middle-end/34458 + * tree-data-ref.c (initialize_matrix_A): Use tree_low_cst, + adjust return type. + +2008-01-09 Richard Guenther <rguenther@suse.de> + PR middle-end/34679 * tree.c (host_integerp): Check for sizetype only if the type is an integer type. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e2b628..78f5439 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-09 Richard Guenther <rguenther@suse.de> + + PR middle-end/34458 + * gcc.c-torture/compile/pr34458.c: New testcase. + 2008-01-08 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> 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 0000000..096cc0c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr34458.c @@ -0,0 +1,16 @@ +/* Testcase by Martin Michlmayr <tbm@cyrius.com> */ + +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 88f6347..e4ac89a 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); } |