2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-13 15:01:21 +08:00

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>

	* 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.

From-SVN: r172788
This commit is contained in:
Easwaran Raman 2011-04-20 18:34:59 +00:00 committed by Easwaran Raman
parent 1809ba94d4
commit 4a25752bbd
4 changed files with 37 additions and 2 deletions

@ -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.

@ -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);
}
}

@ -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.

@ -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" } } */