OSDN Git Service

2011-04-20 Easwaran Raman <eraman@google.com>
authoreraman <eraman@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Apr 2011 18:34:59 +0000 (18:34 +0000)
committereraman <eraman@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Apr 2011 18:34:59 +0000 (18:34 +0000)
* cfgexpand.c (add_alias_set_conflicts): Add conflicts with a variable
containing union type only with -fstrict-aliasing.

2011-04-20  Easwaran Raman  <eraman@google.com>

* gcc.dg/stack-layout-1.c: New test.

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

gcc/ChangeLog
gcc/cfgexpand.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/stack-layout-1.c [new file with mode: 0644]

index 86a2b83..85ec2e6 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-20  Easwaran Raman  <eraman@google.com>
+
+       * cfgexpand.c (add_alias_set_conflicts): Add conflicts with a variable
+       containing union type only with -fstrict-aliasing.
+
 2011-04-20  Jim Meyering  <meyering@redhat.com>
 
        Remove useless if-before-free tests.
index a3abc84..e88bec1 100644 (file)
@@ -373,8 +373,9 @@ add_alias_set_conflicts (void)
                 to elements will conflict.  In case of unions we have
                 to be careful as type based aliasing rules may say
                 access to the same memory does not conflict.  So play
-                safe and add a conflict in this case.  */
-             || contains_union)
+                safe and add a conflict in this case when
+                 -fstrict-aliasing is used.  */
+              || (contains_union && flag_strict_aliasing))
            add_stack_var_conflict (i, j);
        }
     }
index 3528f3e..dfa5c8c 100644 (file)
@@ -1,3 +1,7 @@
+2011-04-20  Easwaran Raman  <eraman@google.com>
+
+       * gcc.dg/stack-layout-1.c: New test.
+
 2011-04-20  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * gcc.dg/vect/vect-shift-3.c, gcc.dg/vect/vect-shift-4.c: New.
diff --git a/gcc/testsuite/gcc.dg/stack-layout-1.c b/gcc/testsuite/gcc.dg/stack-layout-1.c
new file mode 100644 (file)
index 0000000..389a4eb
--- /dev/null
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-strict-aliasing -fdump-rtl-expand" } */
+union U {
+  int a;
+  float b;
+};
+struct A {
+  union U u1;
+  char a[100];
+};
+void bar (struct A *);
+void foo ()
+  {
+    {
+      struct A a;
+      bar (&a);
+    }
+    {
+      struct A a;
+      bar (&a);
+    }
+  }
+
+/* { dg-final { scan-rtl-dump-times "Partition" 1 "expand" } } */
+/* { dg-final { cleanup-rtl-dump "expand" } } */