[Frontend] Flip default of CreateInvocationOptions::ProbePrecompiled to false

This is generally a better default for tools other than the compiler, which
shouldn't assume a PCH file on disk is something they can consume.

Preserve the old behavior in places associated with libclang/c-index-test
(including ASTUnit) as there are tests relying on it and most important
consumers are out-of-tree. It's unclear whether the tests are specifically
trying to test this functionality, and what the downstream implications of
removing it are. Hopefully someone more familiar can clean this up in future.

Differential Revision: https://reviews.llvm.org/D125149
This commit is contained in:
Sam McCall 2022-05-07 02:15:41 +02:00
parent 9e50168be4
commit 00a3c9f2a4
5 changed files with 11 additions and 8 deletions

View File

@ -206,7 +206,7 @@ struct CreateInvocationOptions {
/// This is used to replace -include with -include-pch in the cc1 args.
/// FIXME: ProbePrecompiled=true is a poor, historical default.
/// It misbehaves if the PCH file is from GCC, has the wrong version, etc.
bool ProbePrecompiled = true;
bool ProbePrecompiled = false;
/// If set, the target is populated with the cc1 args produced by the driver.
/// This may be populated even if createInvocation returns nullptr.
std::vector<std::string> *CC1Args = nullptr;

View File

@ -1732,6 +1732,7 @@ ASTUnit *ASTUnit::LoadFromCommandLine(
CreateInvocationOptions CIOpts;
CIOpts.VFS = VFS;
CIOpts.Diags = Diags;
CIOpts.ProbePrecompiled = true; // FIXME: historical default. Needed?
CI = createInvocation(llvm::makeArrayRef(ArgBegin, ArgEnd),
std::move(CIOpts));
if (!CI)

View File

@ -223,6 +223,7 @@ static bool printSourceSymbols(const char *Executable,
Diags(CompilerInstance::createDiagnostics(new DiagnosticOptions));
CreateInvocationOptions CIOpts;
CIOpts.Diags = Diags;
CIOpts.ProbePrecompiled = true; // FIXME: historical default. Needed?
auto CInvok = createInvocation(ArgsWithProgName, std::move(CIOpts));
if (!CInvok)
return true;

View File

@ -510,6 +510,7 @@ static CXErrorCode clang_indexSourceFile_Impl(
CreateInvocationOptions CIOpts;
CIOpts.Diags = Diags;
CIOpts.ProbePrecompiled = true; // FIXME: historical default. Needed?
std::shared_ptr<CompilerInvocation> CInvok =
createInvocation(*Args, std::move(CIOpts));

View File

@ -48,20 +48,20 @@ TEST(BuildCompilerInvocationTest, ProbePrecompiled) {
llvm::IntrusiveRefCntPtr<DiagnosticsEngine> CommandLineDiagsEngine =
clang::CompilerInstance::createDiagnostics(new DiagnosticOptions, &D,
false);
// Default: ProbePrecompiled is true.
// Default: ProbePrecompiled=false
CreateInvocationOptions CIOpts;
CIOpts.Diags = CommandLineDiagsEngine;
CIOpts.VFS = FS;
std::unique_ptr<CompilerInvocation> CI = createInvocation(Args, CIOpts);
ASSERT_TRUE(CI);
EXPECT_THAT(CI->getPreprocessorOpts().Includes, ElementsAre());
EXPECT_EQ(CI->getPreprocessorOpts().ImplicitPCHInclude, "foo.h.pch");
CIOpts.ProbePrecompiled = false;
CI = createInvocation(Args, CIOpts);
ASSERT_TRUE(CI);
EXPECT_THAT(CI->getPreprocessorOpts().Includes, ElementsAre("foo.h"));
EXPECT_EQ(CI->getPreprocessorOpts().ImplicitPCHInclude, "");
CIOpts.ProbePrecompiled = true;
CI = createInvocation(Args, CIOpts);
ASSERT_TRUE(CI);
EXPECT_THAT(CI->getPreprocessorOpts().Includes, ElementsAre());
EXPECT_EQ(CI->getPreprocessorOpts().ImplicitPCHInclude, "foo.h.pch");
}
} // namespace