llvm/clang/test/Interpreter/delayed-template-parsing-pch.cpp

// Test the setup without incremental extensions first
// RUN: %clang_cc1 -std=c++17 -fdelayed-template-parsing -fpch-instantiate-templates %s -emit-pch -o %t.pch -verify
// RUN: %clang_cc1 -std=c++17 -fdelayed-template-parsing -include-pch %t.pch %s -verify

// RUN: %clang_cc1 -std=c++17 -fdelayed-template-parsing -fincremental-extensions -fpch-instantiate-templates %s -emit-pch -o %t.incremental.pch -verify
// RUN: %clang_cc1 -std=c++17 -fdelayed-template-parsing -fincremental-extensions -include-pch %t.incremental.pch %s -verify

// expected-no-diagnostics

#ifndef PCH
#define PCH

// Have one template that is instantiated in the PCH (via the passed option
// -fpch-instantiate-templates) and then serialized
template <typename T> T ft1() { return 0; }
inline int f1() { return ft1<int>(); }

// Have a second late-parsed template that needs to be deserialized
template <typename T> T ft2() { return 0; }

#else

int f2() { return ft2<int>(); }

#endif