#include typedef struct { int x; int y;} S; extern int foo(S*); int hi = 0, lo = 0; int main() { S a; int r; a.x = (int) 0x00010000; a.y = 1; r = foo (&a); if (r == 2 && lo==0 && hi==1) { exit (0); } abort (); } typedef unsigned short u16; __attribute__ ((noinline)) int foo (S* ptr) { int a = ptr->x; int c = 0; u16 b = (u16) a; if (b != 0) { lo = 1; c += ptr->y; } b = a >> 16; if (b != 0) { hi = 1; c+= ptr->y; } c += ptr->y; return c; }