http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56965
Bug #: 56965
Summary: nonoverlapping_component_refs_p is bogus
Classification: Unclassified
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: rtl-optimization
AssignedTo: [email protected]
ReportedBy: [email protected]
struct S {
int i;
int j;
};
struct U {
struct S s;
} __attribute__((may_alias));
int __attribute__((noinline,noclone))
foo (struct U *p, struct U *q)
{
int i;
q->s.j = 1;
i = p->s.i;
return i;
}
int main()
{
int *p = (int *)__builtin_alloca (sizeof (int) * 3);
p[1] = 0;
if (foo ((struct U *)(p + 1), (struct U *)p) != 1)
__builtin_abort ();
return 0;
}
fails on x86_64 with -O2 -fschedule-insns because scheduling exchanges
the store and the load.