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 Liinline 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 Livoid test() { 46*67e74705SXin Li rdar23810407::g<int>(); 47*67e74705SXin Li } 48*67e74705SXin Li 49*67e74705SXin Li //===----------------------------------------------------------------------===// 50*67e74705SXin Li #endif 51