(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
execute/
pr91597.c
       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
       7  foo (struct S *o)
       8  {
       9    if (((__UINTPTR_TYPE__) (o) & 1) == 0)
      10      return o->e;
      11    else
      12      return A;
      13  }
      14  
      15  int
      16  bar (struct S *o)
      17  {
      18    return foo (o) == B || foo (o) == C;
      19  }
      20  
      21  static inline void
      22  baz (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
      31  qux (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
      44  main ()
      45  {
      46    qux (&s);
      47    return 0;
      48  }