Rebase.
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / pr56965-2.c
blob04f55914e9c67420d5df570034e270f24a83032c
1 extern void abort (void);
3 struct S { int i; int j; };
4 struct X { struct S s; int k; };
5 struct Y { int k; struct S s; };
6 union U { struct X x; struct Y y; } __attribute__((may_alias));
8 int __attribute__((noinline))
9 foo (union U *p, union U *q)
11 p->x.s.j = 1;
12 q->y.s.i = 0;
13 return p->x.s.j;
16 struct R { int i; int j; } __attribute__((may_alias));
18 int __attribute__((noinline))
19 bar (struct R *p, struct R *q)
21 p->i = 1;
22 q->j = 0;
23 return p->i;
26 int main()
28 int a[3];
29 if (foo ((union U *)&a[0], (union U *)&a[0]) != 0)
30 abort ();
31 if (bar ((struct R *)&a[1], (struct R *)&a[0]) != 0)
32 abort ();
33 return 0;