17a614d8380297fcd2bc23986241905d97222948cRichard Smith// Test this without pch.
2762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -x c++ -std=c++11 -DHEADER -DSOURCE -fsyntax-only -emit-llvm -o - %s
37a614d8380297fcd2bc23986241905d97222948cRichard Smith
47a614d8380297fcd2bc23986241905d97222948cRichard Smith// Test with pch.
5762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -x c++ -std=c++11 -DHEADER -emit-pch -o %t %s
6762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -x c++ -std=c++11 -DHEADER -include-pch %t -fsyntax-only -emit-llvm -o - %s
77a614d8380297fcd2bc23986241905d97222948cRichard Smith
87a614d8380297fcd2bc23986241905d97222948cRichard Smith#ifdef HEADER
97a614d8380297fcd2bc23986241905d97222948cRichard Smithint n;
107a614d8380297fcd2bc23986241905d97222948cRichard Smithstruct S {
117a614d8380297fcd2bc23986241905d97222948cRichard Smith  int *p = &m;
127a614d8380297fcd2bc23986241905d97222948cRichard Smith  int &m = n;
137a614d8380297fcd2bc23986241905d97222948cRichard Smith  S *that = this;
147a614d8380297fcd2bc23986241905d97222948cRichard Smith};
15ca5233044ef679840d1ad1c46a36b16e2ee8a6e1Richard Smithtemplate<typename T> struct X { T t {0}; };
16f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis
17f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidisstruct v_t { };
18f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis
19f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidisstruct m_t
20f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis{
21f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis    struct { v_t v; };
22f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis    m_t() { }
23f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis};
24f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis
257a614d8380297fcd2bc23986241905d97222948cRichard Smith#endif
267a614d8380297fcd2bc23986241905d97222948cRichard Smith
277a614d8380297fcd2bc23986241905d97222948cRichard Smith#ifdef SOURCE
287a614d8380297fcd2bc23986241905d97222948cRichard SmithS s;
29ca5233044ef679840d1ad1c46a36b16e2ee8a6e1Richard Smith
30ca5233044ef679840d1ad1c46a36b16e2ee8a6e1Richard Smithstruct E { explicit E(int); };
31ca5233044ef679840d1ad1c46a36b16e2ee8a6e1Richard SmithX<E> x;
32f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis
33f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidism_t *test() {
34f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis  return new m_t;
35f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis}
36f8f480ff1cba08ce7e93160546168f729c95804cArgyrios Kyrtzidis
377a614d8380297fcd2bc23986241905d97222948cRichard Smith#elif HEADER
387a614d8380297fcd2bc23986241905d97222948cRichard Smith#undef HEADER
397a614d8380297fcd2bc23986241905d97222948cRichard Smith#define SOURCE
407a614d8380297fcd2bc23986241905d97222948cRichard Smith#endif
41