aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr39233.c18
-rw-r--r--gcc/tree-ssa-loop-ivopts.c4
4 files changed, 32 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1910462..c89a3f4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2009-02-24 Richard Guenther <rguenther@suse.de>
+ Zdenek Dvorak <ook@ucw.cz>
+
+ PR tree-optimization/39233
+ * tree-ssa-loop-ivopts.c (add_candidate_1): Do not except pointers
+ from converting them to a generic type.
+
2009-02-23 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/39260
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4256418..4af6e18 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2009-02-24 Richard Guenther <rguenther@suse.de>
+ Zdenek Dvorak <ook@ucw.cz>
+
+ PR tree-optimization/39233
+ * gcc.c-torture/execute/pr39233.c: New testcase.
+
2009-02-23 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/39260
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr39233.c b/gcc/testsuite/gcc.c-torture/execute/pr39233.c
new file mode 100644
index 0000000..29f7223
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr39233.c
@@ -0,0 +1,18 @@
+extern void abort (void);
+
+__attribute__((noinline)) void
+foo (void *p)
+{
+ long l = (long) p;
+ if (l < 0 || l > 6)
+ abort ();
+}
+
+int
+main ()
+{
+ short i;
+ for (i = 6; i >= 0; i--)
+ foo ((void *) (long) i);
+ return 0;
+}
diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c
index ca1ab98..b1813d3 100644
--- a/gcc/tree-ssa-loop-ivopts.c
+++ b/gcc/tree-ssa-loop-ivopts.c
@@ -2071,9 +2071,7 @@ add_candidate_1 (struct ivopts_data *data,
{
orig_type = TREE_TYPE (base);
type = generic_type_for (orig_type);
- /* Don't convert the base to the generic type for pointers as the generic
- type is an integer type with the same size as the pointer type. */
- if (type != orig_type && !POINTER_TYPE_P (orig_type))
+ if (type != orig_type)
{
base = fold_convert (type, base);
step = fold_convert (type, step);