/* { dg-do compile } */ | |
/* { dg-options "-O2 -fipa-sra" } */ | |
struct W | |
{ | |
int a, b; | |
}; | |
union U | |
{ | |
struct W w; | |
long l; | |
}; | |
struct Z | |
{ | |
int k; | |
union U u; | |
}; | |
struct S | |
{ | |
int i, j; | |
struct Z z; | |
char buf[64]; | |
}; | |
struct W gw; | |
static long | |
__attribute__((noinline)) | |
foo (struct Z z) | |
{ | |
return z.u.l; | |
} | |
static long | |
__attribute__((noinline)) | |
bar (struct S s) | |
{ | |
if (s.i > 100) | |
return s.z.u.w.a; | |
else | |
return foo (s.z); | |
} | |
volatile long g; | |
long | |
entry (struct S *p) | |
{ | |
struct S s = *p; | |
return bar (s) | 2; | |
} |