// { dg-do run } | |
struct A | |
{ | |
short int a1; | |
unsigned char a2; | |
unsigned int a3; | |
}; | |
struct B | |
{ | |
unsigned short b1; | |
const A *b2; | |
}; | |
B b; | |
__attribute__((noinline, noclone)) | |
int foo (unsigned x) | |
{ | |
__asm volatile ("" : "+r" (x) : : "memory"); | |
return x; | |
} | |
inline void | |
bar (const int &) | |
{ | |
} | |
__attribute__((noinline)) void | |
baz () | |
{ | |
const A *a = b.b2; | |
unsigned int i; | |
unsigned short n = b.b1; | |
for (i = 0; i < n; ++i) | |
if (a[i].a1 == 11) | |
{ | |
if (i > 0 && (a[i - 1].a2 & 1)) | |
continue; | |
bar (foo (2)); | |
return; | |
} | |
} | |
int | |
main () | |
{ | |
A a[4] = { { 10, 0, 0 }, { 11, 1, 0 }, { 11, 1, 0 }, { 11, 1, 0 } }; | |
b.b1 = 4; | |
b.b2 = a; | |
baz (); | |
return 0; | |
} | |