// { dg-do compile }
// { dg-options "-Wlogical-op" }

enum { a, b1, b2 };

enum testenum { t1, t2};

extern int c;
extern bool bool_a, bool_b;

template<typename Enum>
class QFlags
{
public:
    typedef void **Zero;
    int i;
    inline QFlags(Enum f) : i(f) {}

    inline operator int() const
    { return i;}

};

QFlags<testenum> f(t2);
extern void do_something(int);

extern testenum testa();

void foo()
{
    if ( f && b2 )            // { dg-warning "logical" }
          do_something(1);
    if ( c && b2 )            // { dg-warning "logical" }
          do_something(2);

    if ( b2 && c == a )       // { dg-bogus "logical" }
          do_something(101);
    if ( 1 && c )
          do_something(102);  // { dg-bogus "logical" }
    if ( t2 && b2 )           // { dg-bogus "logical" }
          do_something(103);
    if ( true && c == a )     // { dg-bogus "logical" }
          do_something(104);
    if ( b2 && true )         // { dg-bogus "logical" }
          do_something(105);
}


void bar()
{
    if ( f || b2 )            // { dg-warning "logical" }
          do_something(1);
    if ( c || b2 )            // { dg-warning "logical" }
          do_something(2);

    if ( b2 || c == a )       // { dg-bogus "logical" }
          do_something(101);
    if ( 1 || c )
          do_something(102);  // { dg-bogus "logical" }
    if ( t2 || b2 )           // { dg-bogus "logical" }
          do_something(103);
    if ( true || c == a )     // { dg-bogus "logical" }
          do_something(104);
    if ( b2 || true )         // { dg-bogus "logical" }
          do_something(105);
}
