17518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis// Without PCH
27518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis// RUN: %clang_cc1 -fsyntax-only -verify -include %s -include %s %s
37518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
47518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis// With PCH
57518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis// RUN: %clang_cc1 -fsyntax-only -verify %s -chain-include %s -chain-include %s
67518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
77518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis#ifndef HEADER1
87518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis#define HEADER1
97518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
107518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
117518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidisnamespace NS {
127518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
137518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidistemplate <class _Tp, _Tp __v>
147518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidisstruct TS
157518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis{
167518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis  static const _Tp value = __v;
177518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis};
187518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
197518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidistemplate <class _Tp, _Tp __v>
207518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidisconst _Tp TS<_Tp, __v>::value;
217518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
227518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios KyrtzidisTS<int, 2> g1;
237518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
247518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis}
257518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
267518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
277518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis#elif not defined(HEADER2)
287518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis#define HEADER2
297518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis#if !defined(HEADER1)
307518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis#error Header inclusion order messed up
317518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis#endif
327518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
337518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidisint g2 = NS::TS<int, 2>::value;
347518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
357518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
367518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis#else
377518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
387518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
3978541c433049322b27b4f437973076ba29cff709Jordan Rose// expected-warning@+1 {{reached main file}}
4078541c433049322b27b4f437973076ba29cff709Jordan Rose#warning reached main file
417518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
427518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidisint g3 = NS::TS<int, 2>::value;
437518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis
447518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis//===----------------------------------------------------------------------===//
457518b3784ed2176aad8dcabe0685c6e02c5f1043Argyrios Kyrtzidis#endif
46