Home | History | Annotate | Download | only in PCH
      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