152
|
1 /* { dg-do run } */
|
|
2 /* { dg-additional-options "-fstrict-aliasing" } */
|
|
3
|
|
4 extern void abort();
|
|
5
|
|
6 typedef int A;
|
|
7 typedef float B;
|
|
8
|
|
9 void __attribute__((noipa))
|
|
10 foo(A * p, B *r, long unk, long oh)
|
|
11 {
|
|
12 for (long i = 0; i < unk; ++i) {
|
|
13 *p = 1;
|
|
14 *r = 2;
|
|
15 if (oh & i)
|
|
16 break;
|
|
17 *r = 3;
|
|
18 *p = 4;
|
|
19 }
|
|
20 }
|
|
21
|
|
22 int main(void)
|
|
23 {
|
|
24 union { A x; B f; } u;
|
|
25 foo(&u.x, &u.f, 1, 1);
|
|
26 if (u.x != 4) abort();
|
|
27 foo(&u.x, &u.f, 2, 1);
|
|
28 if (u.f != 2) abort ();
|
|
29 return 0;
|
|
30 }
|