1 | // Test default argument instantiation in chained PCH. |
2 | |
3 | // Without PCH |
4 | // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -include %s -include %s %s |
5 | |
6 | // With PCH |
7 | // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s -chain-include %s -chain-include %s |
8 | |
9 | // With modules |
10 | // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -fmodules %s -chain-include %s -chain-include %s |
11 | |
12 | // expected-no-diagnostics |
13 | |
14 | #ifndef HEADER1 |
15 | #define HEADER1 |
16 | //===----------------------------------------------------------------------===// |
17 | // Primary header. |
18 | |
19 | namespace rdar23810407 { |
20 | template<typename T> int f(T t) { |
21 | extern T rdar23810407_variable; |
22 | return 0; |
23 | } |
24 | template<typename T> int g(int a = f([] {})); |
25 | } |
26 | |
27 | //===----------------------------------------------------------------------===// |
28 | #elif not defined(HEADER2) |
29 | #define HEADER2 |
30 | #if !defined(HEADER1) |
31 | #error Header inclusion order messed up |
32 | #endif |
33 | |
34 | //===----------------------------------------------------------------------===// |
35 | // Dependent header. |
36 | |
37 | inline void instantiate_once() { |
38 | rdar23810407::g<int>(); |
39 | } |
40 | |
41 | //===----------------------------------------------------------------------===// |
42 | #else |
43 | //===----------------------------------------------------------------------===// |
44 | |
45 | void test() { |
46 | rdar23810407::g<int>(); |
47 | } |
48 | |
49 | //===----------------------------------------------------------------------===// |
50 | #endif |
51 | |