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