| /* { dg-do run } */ | |
| /* { dg-additional-options "-fstrict-aliasing" } */ | |
| extern void abort(); | |
| typedef int A; | |
| typedef float B; | |
| void __attribute__((noipa)) | |
| foo(A * p, B *r, long unk, long oh) | |
| { | |
| for (long i = 0; i < unk; ++i) { | |
| *p = 1; | |
| *r = 2; | |
| if (oh & i) | |
| break; | |
| *r = 3; | |
| *p = 4; | |
| } | |
| } | |
| int main(void) | |
| { | |
| union { A x; B f; } u; | |
| foo(&u.x, &u.f, 1, 1); | |
| if (u.x != 4) abort(); | |
| foo(&u.x, &u.f, 2, 1); | |
| if (u.f != 2) abort (); | |
| return 0; | |
| } |