2011-01-15 04:54:07 +08:00
|
|
|
// Test this without pch.
|
|
|
|
// RUN: %clang_cc1 %s -include %s -verify -fsyntax-only
|
|
|
|
|
|
|
|
// Test with pch.
|
|
|
|
// RUN: %clang_cc1 %s -emit-pch -o %t
|
|
|
|
// RUN: %clang_cc1 %s -include-pch %t -verify -fsyntax-only
|
|
|
|
|
|
|
|
#ifndef HEADER
|
|
|
|
#define HEADER
|
|
|
|
|
|
|
|
#pragma clang diagnostic push
|
|
|
|
#pragma clang diagnostic ignored "-Wtautological-compare"
|
|
|
|
template <typename T>
|
2012-10-30 08:27:21 +08:00
|
|
|
struct TS1 {
|
2011-03-27 17:46:56 +08:00
|
|
|
void m() {
|
|
|
|
T a = 0;
|
|
|
|
T b = a==a;
|
|
|
|
}
|
2011-01-15 04:54:07 +08:00
|
|
|
};
|
|
|
|
#pragma clang diagnostic pop
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
2012-10-30 08:27:21 +08:00
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
struct TS2 {
|
|
|
|
void m() {
|
|
|
|
T a = 0;
|
|
|
|
T b = a==a; // expected-warning {{self-comparison always evaluates to true}} expected-note@39 {{in instantiation of member function}}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2011-01-15 04:54:07 +08:00
|
|
|
void f() {
|
2012-10-30 08:27:21 +08:00
|
|
|
TS1<int> ts1;
|
|
|
|
ts1.m();
|
|
|
|
|
|
|
|
|
|
|
|
TS2<int> ts2;
|
|
|
|
ts2.m();
|
2011-01-15 04:54:07 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|