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}; };
167a614d8380297fcd2bc23986241905d97222948cRichard Smith#endif
177a614d8380297fcd2bc23986241905d97222948cRichard Smith
187a614d8380297fcd2bc23986241905d97222948cRichard Smith#ifdef SOURCE
197a614d8380297fcd2bc23986241905d97222948cRichard SmithS s;
20ca5233044ef679840d1ad1c46a36b16e2ee8a6e1Richard Smith
21ca5233044ef679840d1ad1c46a36b16e2ee8a6e1Richard Smithstruct E { explicit E(int); };
22ca5233044ef679840d1ad1c46a36b16e2ee8a6e1Richard SmithX<E> x;
237a614d8380297fcd2bc23986241905d97222948cRichard Smith#elif HEADER
247a614d8380297fcd2bc23986241905d97222948cRichard Smith#undef HEADER
257a614d8380297fcd2bc23986241905d97222948cRichard Smith#define SOURCE
267a614d8380297fcd2bc23986241905d97222948cRichard Smith#endif
27