| // Test this without pch. | 
 | // RUN: %clang_cc1 %s -include %s -verify -fsyntax-only -Wuninitialized | 
 |  | 
 | // Test with pch. | 
 | // RUN: %clang_cc1 %s -emit-pch -o %t | 
 | // RUN: %clang_cc1 %s -include-pch %t -verify -fsyntax-only -Wuninitialized | 
 |  | 
 | #ifndef HEADER | 
 | #define HEADER | 
 |  | 
 | #pragma clang diagnostic push | 
 | #pragma clang diagnostic ignored "-Wuninitialized" | 
 | template <typename T> | 
 | struct TS1 { | 
 |     void m() { | 
 |       T a; | 
 |       T b = a; | 
 |     } | 
 | }; | 
 | #pragma clang diagnostic pop | 
 |  | 
 | #else | 
 |  | 
 |  | 
 | template <typename T> | 
 | struct TS2 { | 
 |     void m() { | 
 |       T a; | 
 |       T b = a; // expected-warning {{variable 'a' is uninitialized}} \ | 
 |                   expected-note@41 {{in instantiation of member function}} \ | 
 |                   expected-note@28 {{initialize the variable 'a' to silence}} | 
 |     } | 
 | }; | 
 |  | 
 | void f() { | 
 |     TS1<int> ts1; | 
 |     ts1.m(); | 
 |  | 
 |  | 
 |     TS2<int> ts2; | 
 |     ts2.m(); | 
 | } | 
 |  | 
 | #endif |