/* PR middle-end/26300 */ | |
struct S | |
{ | |
char c; | |
struct S *d; | |
struct S *e; | |
}; | |
extern struct S *u, *v; | |
extern void fn1 (struct S *) __attribute__ ((noreturn)); | |
void fn2 (struct S *); | |
static inline struct S * | |
fn3 (struct S *x) | |
{ | |
if (x->c != 6) | |
fn1 (0); | |
return (struct S *) x; | |
} | |
static inline int | |
fn4 (struct S *x) | |
{ | |
if (x != u) | |
return 3; | |
fn2 (x); | |
return 0; | |
} | |
int | |
test (struct S *x) | |
{ | |
struct S *r; | |
int m = 0; | |
for (r = x; r != v; r = (fn3 (r)->d)) | |
if (r->c != 6) | |
fn1 (x); | |
else | |
m |= 1 << (fn4 (fn3 (r)->e) - 1); | |
return m; | |
} |