1 // RUN: %clang_cc1 -std=c++11 -include %s -include %s -verify %s
2 //
3 // Emit with definitions in the declaration:
4 // RxN: %clang_cc1 -std=c++11 -emit-pch -o %t.12 -include %s %s
5 // RxN: %clang_cc1 -std=c++11 -include-pch %t.12 -verify %s
6 //
7 // Emit with definitions in update records:
8 // RxN: %clang_cc1 -std=c++11 -emit-pch -o %t.1 %s
9 // RxN: %clang_cc1 -std=c++11 -include-pch %t.1 -emit-pch -o %t.2 -verify %s
10 // RxN: %clang_cc1 -std=c++11 -include-pch %t.1 -include-pch %t.2 -verify %s
11 
12 
13 // expected-no-diagnostics
14 
15 #ifndef HEADER1
16 #define HEADER1
17 
18 struct Base {
BaseBase19   Base(int) {}
20 
21   template <typename T>
BaseBase22   Base(T) {}
23 };
24 
25 struct Test : Base {
26   using Base::Base;
27 };
28 
29 template <typename T>
30 struct Test2 : Base {
31   using Base::Base;
32 };
33 
34 template <typename B>
35 struct Test3 : B {
36   using B::B;
37 };
38 
39 #elif !defined(HEADER2)
40 #define HEADER2
41 
42 Test test1a(42);
43 Test test1b(nullptr);
44 Test2<int> test2a(42);
45 Test2<int> test2b(nullptr);
46 Test3<Base> test3a(42);
47 Test3<Base> test3b(nullptr);
48 
49 #pragma clang __debug dump Test
50 #pragma clang __debug dump Test2
51 
52 #else
53 
54 Test retest1a(42);
55 Test retest1b(nullptr);
56 Test2<int> retest2a(42);
57 Test2<int> retest2b(nullptr);
58 Test3<Base> retest3a(42);
59 Test3<Base> retest3b(nullptr);
60 
61 #endif
62