1 /* PR tree-optimization/88739 */ 2 #if __SIZEOF_SHORT__ == 2 && __SIZEOF_INT__ == 4 && __CHAR_BIT__ == 8 3 struct A 4 { 5 unsigned int a, b, c; 6 unsigned int d : 30; 7 unsigned int e : 2; 8 }; 9 10 union U 11 { 12 struct A f; 13 unsigned int g[4]; 14 unsigned short h[8]; 15 unsigned char i[16]; 16 }; 17 volatile union U v = { .f.d = 0x4089 }; 18 19 __attribute__((noipa)) void bar(int x)20bar (int x) 21 { 22 static int i; 23 switch (i++) 24 { 25 case 0: if (x != v.f.d) __builtin_abort (); break; 26 case 1: if (x != v.f.e) __builtin_abort (); break; 27 case 2: if (x != v.g[3]) __builtin_abort (); break; 28 case 3: if (x != v.h[6]) __builtin_abort (); break; 29 case 4: if (x != v.h[7]) __builtin_abort (); break; 30 default: __builtin_abort (); break; 31 } 32 } 33 34 void foo(unsigned int x)35foo (unsigned int x) 36 { 37 union U u; 38 u.f.d = x >> 2; 39 u.f.e = 0; 40 bar (u.f.d); 41 bar (u.f.e); 42 bar (u.g[3]); 43 bar (u.h[6]); 44 bar (u.h[7]); 45 } 46 47 int main()48main () 49 { 50 foo (0x10224); 51 return 0; 52 } 53 #else 54 int main()55main () 56 { 57 return 0; 58 } 59 #endif 60