
When instantiating a delayed template, the recorded token stream is passed to `Parser::ParseLateTemplatedFuncDef` which will append the current token "so it doesn't get lost". With incremental extensions enabled, this is `repl_input_end` which subsequently needs support for (de)serialization.
26 lines
964 B
C++
26 lines
964 B
C++
// 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
|