re PR tree-optimization/26421 (tree-ssa-alias.c:find_used_portions considers foo...
authorRichard Guenther <rguenther@suse.de>
Sun, 26 Feb 2006 21:02:43 +0000 (21:02 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Sun, 26 Feb 2006 21:02:43 +0000 (21:02 +0000)
2006-02-26  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/26421
* tree-ssa-alias.c (find_used_portions): Don't treat parameters
in function calls that are ADDR_EXPRs as using the whole structure.

* gcc.dg/tree-ssa/pr26421.c: New testcase.

From-SVN: r111461

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

index c2e563914f6b1aae8ea9aacfe9a14d9ad778d204..1d562dced7399d132dbc809627b044d72ced6492 100644 (file)
@@ -1,3 +1,9 @@
+2006-02-26  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/26421
+       * tree-ssa-alias.c (find_used_portions): Don't treat parameters
+       in function calls that are ADDR_EXPRs as using the whole structure.
+
 2006-02-26  Steven Bosscher  <stevenb.gcc@gmail.com>
 
        * common.opt (-floop-optimize, -frerun-loop-opt): Remove.
index 68924f569386cdc744e7ef012dc113684de3b98d..81f9b5e7c1e882ea916b350036ef3823a23ad539 100644 (file)
@@ -1,3 +1,8 @@
+2006-02-26  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/26421
+       * gcc.dg/tree-ssa/pr26421.c: New testcase.
+
 2006-02-26  Steven Bosscher  <stevenb.gcc@gmail.com>
 
        * gcc.dg/20031201-1.c: Don't use -frerun-loop-opt.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr26421.c b/gcc/testsuite/gcc.dg/tree-ssa/pr26421.c
new file mode 100644 (file)
index 0000000..edb3685
--- /dev/null
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-alias1-vops" } */
+
+typedef struct {
+  int i;
+  int j;
+  int k;
+} Foo;
+
+void bar(Foo*);
+void foo(void)
+{
+  Foo a;
+  a.i = 1;
+  bar(&a);
+}
+
+/* { dg-final { scan-tree-dump-times "V_MAY_DEF" 1 "alias1" } } */
+/* { dg-final { cleanup-tree-dump "alias1" } } */
index fe69198b2f2232f62dff4a39b175c635a3562b84..5e13f00ed79303e7023635b3ff6f7554c1e96544 100644 (file)
@@ -3078,6 +3078,17 @@ find_used_portions (tree *tp, int *walk_subtrees, void *lhs_p)
          }
       }
       break;
+    case CALL_EXPR:
+      {
+       tree *arg;
+       for (arg = &TREE_OPERAND (*tp, 1); *arg; arg = &TREE_CHAIN (*arg))
+         {
+           if (TREE_CODE (TREE_VALUE (*arg)) != ADDR_EXPR)
+              find_used_portions (&TREE_VALUE (*arg), walk_subtrees, NULL);
+         }
+       *walk_subtrees = 0;
+       return NULL_TREE;
+      }
     case VAR_DECL:
     case PARM_DECL:
     case RESULT_DECL: