sammccall created this revision. sammccall added a reviewer: kadircet. Herald added a subscriber: arphaman. Herald added a project: All. sammccall requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D125149 Files: clang/include/clang/Frontend/Utils.h clang/lib/Frontend/ASTUnit.cpp clang/tools/c-index-test/core_main.cpp clang/tools/libclang/Indexing.cpp clang/unittests/Frontend/UtilsTest.cpp Index: clang/unittests/Frontend/UtilsTest.cpp =================================================================== --- clang/unittests/Frontend/UtilsTest.cpp +++ clang/unittests/Frontend/UtilsTest.cpp @@ -48,20 +48,20 @@ 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"); + EXPECT_THAT(CI->getPreprocessorOpts().Includes, ElementsAre("foo.h")); + EXPECT_EQ(CI->getPreprocessorOpts().ImplicitPCHInclude, ""); - CIOpts.ProbePrecompiled = false; + CIOpts.ProbePrecompiled = true; CI = createInvocation(Args, CIOpts); ASSERT_TRUE(CI); - EXPECT_THAT(CI->getPreprocessorOpts().Includes, ElementsAre("foo.h")); - EXPECT_EQ(CI->getPreprocessorOpts().ImplicitPCHInclude, ""); + EXPECT_THAT(CI->getPreprocessorOpts().Includes, ElementsAre()); + EXPECT_EQ(CI->getPreprocessorOpts().ImplicitPCHInclude, "foo.h.pch"); } } // namespace Index: clang/tools/libclang/Indexing.cpp =================================================================== --- clang/tools/libclang/Indexing.cpp +++ clang/tools/libclang/Indexing.cpp @@ -510,6 +510,7 @@ CreateInvocationOptions CIOpts; CIOpts.Diags = Diags; + CIOpts.ProbePrecompiled = true; // FIXME: historical default. Needed? std::shared_ptr<CompilerInvocation> CInvok = createInvocation(*Args, std::move(CIOpts)); Index: clang/tools/c-index-test/core_main.cpp =================================================================== --- clang/tools/c-index-test/core_main.cpp +++ clang/tools/c-index-test/core_main.cpp @@ -223,6 +223,7 @@ 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; Index: clang/lib/Frontend/ASTUnit.cpp =================================================================== --- clang/lib/Frontend/ASTUnit.cpp +++ clang/lib/Frontend/ASTUnit.cpp @@ -1732,6 +1732,7 @@ 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) Index: clang/include/clang/Frontend/Utils.h =================================================================== --- clang/include/clang/Frontend/Utils.h +++ clang/include/clang/Frontend/Utils.h @@ -206,7 +206,7 @@ /// 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;
Index: clang/unittests/Frontend/UtilsTest.cpp =================================================================== --- clang/unittests/Frontend/UtilsTest.cpp +++ clang/unittests/Frontend/UtilsTest.cpp @@ -48,20 +48,20 @@ 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"); + EXPECT_THAT(CI->getPreprocessorOpts().Includes, ElementsAre("foo.h")); + EXPECT_EQ(CI->getPreprocessorOpts().ImplicitPCHInclude, ""); - CIOpts.ProbePrecompiled = false; + CIOpts.ProbePrecompiled = true; CI = createInvocation(Args, CIOpts); ASSERT_TRUE(CI); - EXPECT_THAT(CI->getPreprocessorOpts().Includes, ElementsAre("foo.h")); - EXPECT_EQ(CI->getPreprocessorOpts().ImplicitPCHInclude, ""); + EXPECT_THAT(CI->getPreprocessorOpts().Includes, ElementsAre()); + EXPECT_EQ(CI->getPreprocessorOpts().ImplicitPCHInclude, "foo.h.pch"); } } // namespace Index: clang/tools/libclang/Indexing.cpp =================================================================== --- clang/tools/libclang/Indexing.cpp +++ clang/tools/libclang/Indexing.cpp @@ -510,6 +510,7 @@ CreateInvocationOptions CIOpts; CIOpts.Diags = Diags; + CIOpts.ProbePrecompiled = true; // FIXME: historical default. Needed? std::shared_ptr<CompilerInvocation> CInvok = createInvocation(*Args, std::move(CIOpts)); Index: clang/tools/c-index-test/core_main.cpp =================================================================== --- clang/tools/c-index-test/core_main.cpp +++ clang/tools/c-index-test/core_main.cpp @@ -223,6 +223,7 @@ 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; Index: clang/lib/Frontend/ASTUnit.cpp =================================================================== --- clang/lib/Frontend/ASTUnit.cpp +++ clang/lib/Frontend/ASTUnit.cpp @@ -1732,6 +1732,7 @@ 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) Index: clang/include/clang/Frontend/Utils.h =================================================================== --- clang/include/clang/Frontend/Utils.h +++ clang/include/clang/Frontend/Utils.h @@ -206,7 +206,7 @@ /// 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;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits