blob: eea6bd73f5465475036bb6782f5bd6b3a8f8e24d [file] [log] [blame]
Argyrios Kyrtzidis243aedb2011-01-14 20:54:07 +00001// Test this without pch.
Richard Trieu30bfa362013-11-02 02:11:23 +00002// RUN: %clang_cc1 %s -include %s -verify -fsyntax-only -Wuninitialized
Argyrios Kyrtzidis243aedb2011-01-14 20:54:07 +00003
4// Test with pch.
5// RUN: %clang_cc1 %s -emit-pch -o %t
Richard Trieu30bfa362013-11-02 02:11:23 +00006// RUN: %clang_cc1 %s -include-pch %t -verify -fsyntax-only -Wuninitialized
Argyrios Kyrtzidis243aedb2011-01-14 20:54:07 +00007
8#ifndef HEADER
9#define HEADER
10
11#pragma clang diagnostic push
Richard Trieu30bfa362013-11-02 02:11:23 +000012#pragma clang diagnostic ignored "-Wuninitialized"
Argyrios Kyrtzidis243aedb2011-01-14 20:54:07 +000013template <typename T>
Argyrios Kyrtzidisefaa54a2012-10-30 00:27:21 +000014struct TS1 {
Chandler Carruth33bf3e72011-03-27 09:46:56 +000015 void m() {
Richard Trieu30bfa362013-11-02 02:11:23 +000016 T a;
17 T b = a;
Chandler Carruth33bf3e72011-03-27 09:46:56 +000018 }
Argyrios Kyrtzidis243aedb2011-01-14 20:54:07 +000019};
20#pragma clang diagnostic pop
21
22#else
23
Argyrios Kyrtzidisefaa54a2012-10-30 00:27:21 +000024
25template <typename T>
26struct TS2 {
27 void m() {
Richard Trieu30bfa362013-11-02 02:11:23 +000028 T a;
29 T b = a; // expected-warning {{variable 'a' is uninitialized}} \
30 expected-note@41 {{in instantiation of member function}} \
31 expected-note@28 {{initialize the variable 'a' to silence}}
Argyrios Kyrtzidisefaa54a2012-10-30 00:27:21 +000032 }
33};
34
Argyrios Kyrtzidis243aedb2011-01-14 20:54:07 +000035void f() {
Argyrios Kyrtzidisefaa54a2012-10-30 00:27:21 +000036 TS1<int> ts1;
37 ts1.m();
38
39
40 TS2<int> ts2;
41 ts2.m();
Argyrios Kyrtzidis243aedb2011-01-14 20:54:07 +000042}
43
44#endif