]> gcc.gnu.org Git - gcc.git/commitdiff
re PR tree-optimization/2480 (aliasing problem with global structures)
authorRichard Guenther <rguenther@suse.de>
Fri, 3 Apr 2009 12:38:08 +0000 (12:38 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 3 Apr 2009 12:38:08 +0000 (12:38 +0000)
2009-04-03  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/2480
PR tree-optimization/23086
* gcc.dg/tree-ssa/pr2480.c: New testcase.
* gcc.dg/tree-ssa/pr23086.c: Likewise.

From-SVN: r145499

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr23086.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/tree-ssa/pr2480.c [new file with mode: 0644]

index e9f0ff44909c3cd2f915931e2e2670d00852d4df..ded87d66bdad5a52276c0dfbd6e90289764e2b27 100644 (file)
@@ -1,3 +1,10 @@
+2009-04-03  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/2480
+       PR tree-optimization/23086
+       * gcc.dg/tree-ssa/pr2480.c: New testcase.
+       * gcc.dg/tree-ssa/pr23086.c: Likewise.
+
 2009-04-03  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/34743
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr23086.c b/gcc/testsuite/gcc.dg/tree-ssa/pr23086.c
new file mode 100644 (file)
index 0000000..206b92d
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do run } */
+/* { dg-options "-O -fdump-tree-optimized" } */
+
+extern void link_error (void);
+extern void abort (void);
+
+int *t;
+int __attribute__((noinline)) g(int *a)
+{
+  t = a;
+  *a = 2;
+}
+
+void __attribute__((noinline)) f(int *a)
+{
+  int b;
+  b = 1;
+  g(&b);
+  b = 2;
+  *a = 1;
+  if (b != 2)
+    link_error();
+}
+
+int main(void)
+{
+  int t;
+  f(&t);
+  if (t != 1)
+    abort ();
+  return 0;
+}
+
+/* { dg-final { scan-tree-dump-not "link_error" "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr2480.c b/gcc/testsuite/gcc.dg/tree-ssa/pr2480.c
new file mode 100644 (file)
index 0000000..d7f7af4
--- /dev/null
@@ -0,0 +1,53 @@
+/* { dg-do link } */
+/* { dg-options "-O2" } */
+
+/* We have enough cascading at -O2 to cover the missed control-dependence
+   in SCCVN (which considers the link_error calls to clobber the structs).  */
+
+struct example
+{
+  char a;
+  int b;
+  char c;
+} *ex1;
+
+extern void link_error(void);
+
+void
+bar (void)
+{
+  ex1->a = 1;
+  ex1->b = 2;
+  ex1->c = 3;
+
+  if (ex1->a != 1)
+    link_error ();
+  if (ex1->b != 2)
+    link_error ();
+  if (ex1->c != 3)
+    link_error ();
+
+}
+
+void
+foo (struct example *ex2)
+{
+  ex2->a = 1;
+  ex2->b = 2;
+  ex2->c = 3;
+
+  if (ex2->a != 1)
+    link_error ();
+  if (ex2->b != 2)
+    link_error ();
+  if (ex2->c != 3)
+    link_error ();
+
+}
+
+int main (void)
+{
+  bar ();
+  foo (ex1);
+  return 0;
+}
This page took 0.084108 seconds and 5 git commands to generate.