1*67e74705SXin Li // Without PCH 2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -include %s -include %s %s 3*67e74705SXin Li 4*67e74705SXin Li // With PCH 5*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -chain-include %s -chain-include %s 6*67e74705SXin Li 7*67e74705SXin Li #ifndef HEADER1 8*67e74705SXin Li #define HEADER1 9*67e74705SXin Li //===----------------------------------------------------------------------===// 10*67e74705SXin Li 11*67e74705SXin Li namespace NS { 12*67e74705SXin Li 13*67e74705SXin Li template <class _Tp, _Tp __v> 14*67e74705SXin Li struct TS 15*67e74705SXin Li { 16*67e74705SXin Li static const _Tp value = __v; 17*67e74705SXin Li }; 18*67e74705SXin Li 19*67e74705SXin Li template <class _Tp, _Tp __v> 20*67e74705SXin Li const _Tp TS<_Tp, __v>::value; 21*67e74705SXin Li 22*67e74705SXin Li TS<int, 2> g1; 23*67e74705SXin Li 24*67e74705SXin Li } 25*67e74705SXin Li 26*67e74705SXin Li //===----------------------------------------------------------------------===// 27*67e74705SXin Li #elif not defined(HEADER2) 28*67e74705SXin Li #define HEADER2 29*67e74705SXin Li #if !defined(HEADER1) 30*67e74705SXin Li #error Header inclusion order messed up 31*67e74705SXin Li #endif 32*67e74705SXin Li 33*67e74705SXin Li int g2 = NS::TS<int, 2>::value; 34*67e74705SXin Li 35*67e74705SXin Li //===----------------------------------------------------------------------===// 36*67e74705SXin Li #else 37*67e74705SXin Li //===----------------------------------------------------------------------===// 38*67e74705SXin Li 39*67e74705SXin Li // expected-warning@+1 {{reached main file}} 40*67e74705SXin Li #warning reached main file 41*67e74705SXin Li 42*67e74705SXin Li int g3 = NS::TS<int, 2>::value; 43*67e74705SXin Li 44*67e74705SXin Li //===----------------------------------------------------------------------===// 45*67e74705SXin Li #endif 46