summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr36817.c10
-rw-r--r--gcc/tree-chrec.c3
4 files changed, 22 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d766455c9bd..e897d5032f0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-08-21 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/36817
+ * tree-chrec.c (chrec_apply): Always call chrec_fold_plus which
+ makes sure to produce a result of the correct type.
+
2008-08-21 Jan Hubicka <jh@suse.cz>
Backport from LTO branch:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9ca95d14c3f..4cade5a92a0 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2008-08-21 Richard Guenther <rguenther@suse.de>
+ PR middle-end/36817
+ * gcc.c-torture/compile/pr36817.c: New testcase.
+
+2008-08-21 Richard Guenther <rguenther@suse.de>
+
* gcc.dg/tree-ssa/ssa-fre-13.c: Remove XFAIL.
* gcc.dg/tree-ssa/ssa-fre-14.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-17.c: Likewise.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr36817.c b/gcc/testsuite/gcc.c-torture/compile/pr36817.c
new file mode 100644
index 00000000000..396f491ec05
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr36817.c
@@ -0,0 +1,10 @@
+void xxx()
+{
+ unsigned i;
+ unsigned *p=0;
+ for(i=0; i<4; ++i)
+ *p++=0;
+ for(i=0; i<4; ++i)
+ *p++=0;
+}
+
diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c
index 89e96fd53b6..da359529e4c 100644
--- a/gcc/tree-chrec.c
+++ b/gcc/tree-chrec.c
@@ -579,8 +579,7 @@ chrec_apply (unsigned var,
/* "{a, +, b} (x)" -> "a + b*x". */
x = chrec_convert_rhs (type, x, NULL);
res = chrec_fold_multiply (TREE_TYPE (x), CHREC_RIGHT (chrec), x);
- if (!integer_zerop (CHREC_LEFT (chrec)))
- res = chrec_fold_plus (type, CHREC_LEFT (chrec), res);
+ res = chrec_fold_plus (type, CHREC_LEFT (chrec), res);
}
else if (TREE_CODE (chrec) != POLYNOMIAL_CHREC)