Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.c-torture/execute/pr91597.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.c-torture/execute/pr91597.c Thu Feb 13 11:34:05 2020 +0900 @@ -0,0 +1,48 @@ +/* PR tree-optimization/91597 */ + +enum E { A, B, C }; +struct __attribute__((aligned (4))) S { enum E e; }; + +enum E +foo (struct S *o) +{ + if (((__UINTPTR_TYPE__) (o) & 1) == 0) + return o->e; + else + return A; +} + +int +bar (struct S *o) +{ + return foo (o) == B || foo (o) == C; +} + +static inline void +baz (struct S *o, int d) +{ + if (__builtin_expect (!bar (o), 0)) + __builtin_abort (); + if (d > 2) return; + baz (o, d + 1); +} + +void +qux (struct S *o) +{ + switch (o->e) + { + case A: return; + case B: baz (o, 0); break; + case C: baz (o, 0); break; + } +} + +struct S s = { C }; + +int +main () +{ + qux (&s); + return 0; +}