re PR tree-optimization/36765 (Revision 137573 miscompiles 464.h264ref in SPEC CPU...
authorRichard Guenther <rguenther@suse.de>
Fri, 11 Jul 2008 12:44:26 +0000 (12:44 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 11 Jul 2008 12:44:26 +0000 (12:44 +0000)
2008-07-11  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/36765
* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Add
aliases from HEAP vars to SMTs.

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

From-SVN: r137715

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/pr36765.c [new file with mode: 0644]
gcc/tree-ssa-alias.c

index e5d68ed6ef889482cf068869b48e8228c397267e..04004fa76df3daaa42b050244e5450c8d9fea5c4 100644 (file)
@@ -1,3 +1,9 @@
+2008-07-11  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/36765
+       * tree-ssa-alias.c (compute_flow_insensitive_aliasing): Add
+       aliases from HEAP vars to SMTs.
+
 2008-07-10  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * Makefile.in (LOOSE_WARN, STRICT_WARN): Update comments.
index 0b83fa5c37fecf2a416f91f930fcab83491d7019..f26bcbf46e6d6bf9180f9da5353c1ad9fad470c2 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-11  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/36765
+       * gcc.c-torture/execute/pr36765.c: New testcase.
+
 2008-07-10  Joseph Myers  <joseph@codesourcery.com>
 
        PR middle-end/29056
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr36765.c b/gcc/testsuite/gcc.c-torture/execute/pr36765.c
new file mode 100644 (file)
index 0000000..6883b0c
--- /dev/null
@@ -0,0 +1,15 @@
+int __attribute__((noinline))
+foo(int i)
+{
+  int *p = __builtin_malloc (4 * sizeof(int));
+  *p = 0;
+  p[i] = 1;
+  return *p;
+}
+extern void abort (void);
+int main()
+{
+  if (foo(0) != 1)
+    abort ();
+  return 0;
+}
index d4a1e219a0c737a131f5073be5f9798d6f85192e..3aa79feddd6ac13752e51e13ea265c3fcd4ff077 100644 (file)
@@ -2370,6 +2370,8 @@ have_common_aliases_p (bitmap tag1aliases, bitmap tag2aliases)
 static void
 compute_flow_insensitive_aliasing (struct alias_info *ai)
 {
+  referenced_var_iterator rvi;
+  tree var;
   size_t i;
 
   timevar_push (TV_FLOW_INSENSITIVE);
@@ -2460,6 +2462,24 @@ compute_flow_insensitive_aliasing (struct alias_info *ai)
          add_may_alias (tag1, tag2);
        }
     }
+
+  /* We have to add all HEAP variables to all SMTs aliases bitmaps.
+     As we don't know which effective type the HEAP will have we cannot
+     do better here and we need the conflicts with obfuscated pointers
+     (a simple (*(int[n] *)ptr)[i] will do, with ptr from a VLA array
+     allocation).  */
+  for (i = 0; i < ai->num_pointers; i++)
+    {
+      struct alias_map_d *p_map = ai->pointers[i];
+      tree tag = symbol_mem_tag (p_map->var);
+
+      FOR_EACH_REFERENCED_VAR (var, rvi)
+       {
+         if (var_ann (var)->is_heapvar)
+           add_may_alias (tag, var);
+       }
+    }
+
   timevar_pop (TV_FLOW_INSENSITIVE);
 }