OSDN Git Service

2009-02-17 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Feb 2009 16:01:53 +0000 (16:01 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Feb 2009 16:01:53 +0000 (16:01 +0000)
PR tree-optimization/39202
* tree-ssa-structalias.c (do_structure_copy): Before collapsing
a var make sure to follow existing collapses.

* gcc.c-torture/compile/pr39202.c: New testcase.

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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr39202.c [new file with mode: 0644]
gcc/tree-ssa-structalias.c

index d4be347..6947e99 100644 (file)
@@ -1,5 +1,11 @@
 2009-02-17  Richard Guenther  <rguenther@suse.de>
 
+       PR tree-optimization/39202
+       * tree-ssa-structalias.c (do_structure_copy): Before collapsing
+       a var make sure to follow existing collapses.
+
+2009-02-17  Richard Guenther  <rguenther@suse.de>
+
        PR middle-end/39214
        * langhooks.c (lhd_print_error_function): Check for NULL block.
 
index bf7b705..5b620d4 100644 (file)
@@ -1,5 +1,10 @@
 2009-02-17  Richard Guenther  <rguenther@suse.de>
 
+       PR tree-optimization/39202
+       * gcc.c-torture/compile/pr39202.c: New testcase.
+
+2009-02-17  Richard Guenther  <rguenther@suse.de>
+
        PR tree-optimization/39204
        * gcc.dg/torture/pr39204.c: New testcase.
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr39202.c b/gcc/testsuite/gcc.c-torture/compile/pr39202.c
new file mode 100644 (file)
index 0000000..f79b831
--- /dev/null
@@ -0,0 +1,33 @@
+typedef struct
+{
+  union
+    {
+      int * aaa;
+    } u;
+} t_a;
+
+typedef struct
+{
+  unsigned bbb : 1;
+} t_b;
+
+typedef struct
+{
+  int ccc;
+  t_a ddd;
+  t_b eee;
+  int fff;
+} t_c;
+
+typedef struct t_d
+{
+  t_c f1;
+  t_c f2;
+} t_d;
+
+void foo (void)
+{
+  t_d ggg;
+  ggg.f1 = ggg.f2;
+}
+
index f9962b3..8f88796 100644 (file)
@@ -3405,8 +3405,8 @@ do_structure_copy (tree lhsop, tree rhsop)
        {
          if (!do_simple_structure_copy (lhs, rhs, MIN (lhssize, rhssize)))
            {
-             lhs.var = collapse_rest_of_var (lhs.var);
-             rhs.var = collapse_rest_of_var (rhs.var);
+             lhs.var = collapse_rest_of_var (get_varinfo_fc (lhs.var)->id);
+             rhs.var = collapse_rest_of_var (get_varinfo_fc (rhs.var)->id);
              lhs.offset = 0;
              rhs.offset = 0;
              lhs.type = SCALAR;