1*17773fcdSChandler Carruth // RUN: %clang_cc1 -fsyntax-only -verify %s 2*17773fcdSChandler Carruth foo()3*17773fcdSChandler Carruthtemplate <int A, int B> void foo() { 4*17773fcdSChandler Carruth (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 5*17773fcdSChandler Carruth (void)(A == B); 6*17773fcdSChandler Carruth } 7*17773fcdSChandler Carruth template <int A, int B> struct S1 { fooS18*17773fcdSChandler Carruth void foo() { 9*17773fcdSChandler Carruth (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 10*17773fcdSChandler Carruth (void)(A == B); 11*17773fcdSChandler Carruth } 12*17773fcdSChandler Carruth }; 13*17773fcdSChandler Carruth 14*17773fcdSChandler Carruth template <int A, int B> struct S2 { fooS215*17773fcdSChandler Carruth template <typename T> T foo() { 16*17773fcdSChandler Carruth (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 17*17773fcdSChandler Carruth (void)(A == B); 18*17773fcdSChandler Carruth } 19*17773fcdSChandler Carruth }; 20*17773fcdSChandler Carruth 21*17773fcdSChandler Carruth struct S3 { fooS322*17773fcdSChandler Carruth template <int A, int B> void foo() { 23*17773fcdSChandler Carruth (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 24*17773fcdSChandler Carruth (void)(A == B); 25*17773fcdSChandler Carruth } 26*17773fcdSChandler Carruth }; 27*17773fcdSChandler Carruth 28*17773fcdSChandler Carruth template <int A> struct S4 { fooS429*17773fcdSChandler Carruth template <int B> void foo() { 30*17773fcdSChandler Carruth (void)(A == A); // expected-warning {{self-comparison always evaluates to true}} 31*17773fcdSChandler Carruth (void)(A == B); 32*17773fcdSChandler Carruth } 33*17773fcdSChandler Carruth }; 34*17773fcdSChandler Carruth 35*17773fcdSChandler Carruth const int N = 42; foo2()36*17773fcdSChandler Carruthtemplate <int X> void foo2() { 37*17773fcdSChandler Carruth (void)(X == N); 38*17773fcdSChandler Carruth (void)(N == X); 39*17773fcdSChandler Carruth } 40*17773fcdSChandler Carruth test()41*17773fcdSChandler Carruthvoid test() { 42*17773fcdSChandler Carruth foo<1, 1>(); 43*17773fcdSChandler Carruth S1<1, 1> s1; s1.foo(); 44*17773fcdSChandler Carruth S2<1, 1> s2; s2.foo<void>(); 45*17773fcdSChandler Carruth S3 s3; s3.foo<1, 1>(); 46*17773fcdSChandler Carruth S4<1> s4; s4.foo<1>(); 47*17773fcdSChandler Carruth foo2<N>(); 48*17773fcdSChandler Carruth } 49