// 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;
}