(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
opt/
pr104334.C
// PR tree-optimization/104334
// { dg-do run { target c++11 } }
// { dg-options "-O2 --param logical-op-non-short-circuit=0" }

enum class A { A0, A1, A2, A3 };
int x;

__attribute__((noipa)) void
baz ()
{
  x = 1;
}

struct B {
  unsigned b : 2;

  A
  foo () const
  {
    return static_cast<A> (b);
  }

  __attribute__((noinline)) void
  bar ()
  {
    if (foo () == A::A2 || foo () == A::A3)
      baz ();
  }
};

int
main ()
{
  B c;
  c.b = 2;
  c.bar ();
  if (x != 1)
    __builtin_abort ();
  return 0;
}