2009-02-24 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Feb 2009 11:05:15 +0000 (11:05 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 24 Feb 2009 11:05:15 +0000 (11:05 +0000)
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.

* gcc.c-torture/execute/pr39233.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@144405 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr39233.c [new file with mode: 0644]
gcc/tree-ssa-loop-ivopts.c

index 1910462..c89a3f4 100644 (file)
@@ -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
index 4256418..4af6e18 100644 (file)
@@ -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 (file)
index 0000000..29f7223
--- /dev/null
@@ -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;
+}
index ca1ab98..b1813d3 100644 (file)
@@ -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);