/* { 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; | |
} |