// RUN: %clang_cc1 -fsyntax-only -verify %s template void foo() { (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} (void)(A == B); } template struct S1 { void foo() { (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} (void)(A == B); } }; template struct S2 { template T foo() { (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} (void)(A == B); } }; struct S3 { template void foo() { (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} (void)(A == B); } }; template struct S4 { template void foo() { (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} (void)(A == B); } }; const int N = 42; template void foo2() { (void)(X == N); (void)(N == X); } void test() { foo<1, 1>(); S1<1, 1> s1; s1.foo(); S2<1, 1> s2; s2.foo(); S3 s3; s3.foo<1, 1>(); S4<1> s4; s4.foo<1>(); foo2(); }