// Test this without pch.
// RUN: %clang_cc1 -fsyntax-only %s -DBODY
// Test with pch.
// RUN: %clang_cc1 -emit-pch -o %t %s
// RUN: %clang_cc1 -include-pch %t -fsyntax-only %s -DBODY
// Test with pch with template instantiation in the pch.
// RUN: %clang_cc1 -emit-pch -fpch-instantiate-templates -o %t %s -verify
#ifndef HEADER_H
#define HEADER_H
template <typename T>
void f();
struct X; // @16
void g() { f<X>(); } // @17 instantiation not performed yet
template <typename T>
void f() { T t; }; // @20
#endif
#ifdef BODY
struct X {};
#endif
// expected-error@20 {{variable has incomplete type}}
// expected-note@17 {{in instantiation of function template specialization}}
// expected-note@16 {{forward declaration}}