1 /* PR tree-optimization/91597 */ 2 3 enum E { A, B, C }; 4 struct __attribute__((aligned (4))) S { enum E e; }; 5 6 enum E foo(struct S * o)7foo (struct S *o) 8 { 9 if (((__UINTPTR_TYPE__) (o) & 1) == 0) 10 return o->e; 11 else 12 return A; 13 } 14 15 int bar(struct S * o)16bar (struct S *o) 17 { 18 return foo (o) == B || foo (o) == C; 19 } 20 21 static inline void baz(struct S * o,int d)22baz (struct S *o, int d) 23 { 24 if (__builtin_expect (!bar (o), 0)) 25 __builtin_abort (); 26 if (d > 2) return; 27 baz (o, d + 1); 28 } 29 30 void qux(struct S * o)31qux (struct S *o) 32 { 33 switch (o->e) 34 { 35 case A: return; 36 case B: baz (o, 0); break; 37 case C: baz (o, 0); break; 38 } 39 } 40 41 struct S s = { C }; 42 43 int main()44main () 45 { 46 qux (&s); 47 return 0; 48 } 49