Author: Jan Svoboda Date: 2025-04-04T10:11:14-07:00 New Revision: 1688c3062a56b4fca1f8ad28f2865df0ed8ca940
URL: https://github.com/llvm/llvm-project/commit/1688c3062a56b4fca1f8ad28f2865df0ed8ca940 DIFF: https://github.com/llvm/llvm-project/commit/1688c3062a56b4fca1f8ad28f2865df0ed8ca940.diff LOG: [clang] Do not share ownership of `PreprocessorOptions` (#133467) This PR makes it so that `CompilerInvocation` is the sole owner of the `PreprocessorOptions` instance. Added: Modified: clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.cpp clang-tools-extra/clangd/ModulesBuilder.cpp clang/include/clang/Frontend/CompilerInvocation.h clang/include/clang/Lex/Preprocessor.h clang/lib/Frontend/ASTUnit.cpp clang/lib/Frontend/CompilerInstance.cpp clang/lib/Lex/PPDirectives.cpp clang/lib/Lex/PPLexerChange.cpp clang/lib/Lex/Preprocessor.cpp clang/unittests/Analysis/MacroExpansionContextTest.cpp clang/unittests/Basic/SourceManagerTest.cpp clang/unittests/Lex/LexerTest.cpp clang/unittests/Lex/ModuleDeclStateTest.cpp clang/unittests/Lex/PPCallbacksTest.cpp clang/unittests/Lex/PPConditionalDirectiveRecordTest.cpp clang/unittests/Lex/PPDependencyDirectivesTest.cpp clang/unittests/Lex/PPMemoryAllocationsTest.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.cpp b/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.cpp index a15850cb63542..03a3e8404e069 100644 --- a/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.cpp +++ b/clang-tools-extra/clang-tidy/ExpandModularHeadersPPCallbacks.cpp @@ -89,15 +89,14 @@ ExpandModularHeadersPPCallbacks::ExpandModularHeadersPPCallbacks( HeaderInfo = std::make_unique<HeaderSearch>(HSOpts, Sources, Diags, LangOpts, &Compiler.getTarget()); - auto PO = std::make_shared<PreprocessorOptions>(); - *PO = Compiler.getPreprocessorOpts(); - - PP = std::make_unique<clang::Preprocessor>(PO, Diags, LangOpts, Sources, - *HeaderInfo, ModuleLoader, - /*IILookup=*/nullptr, - /*OwnsHeaderSearch=*/false); + PP = std::make_unique<clang::Preprocessor>(Compiler.getPreprocessorOpts(), + Diags, LangOpts, Sources, + *HeaderInfo, ModuleLoader, + /*IILookup=*/nullptr, + /*OwnsHeaderSearch=*/false); PP->Initialize(Compiler.getTarget(), Compiler.getAuxTarget()); - InitializePreprocessor(*PP, *PO, Compiler.getPCHContainerReader(), + InitializePreprocessor(*PP, Compiler.getPreprocessorOpts(), + Compiler.getPCHContainerReader(), Compiler.getFrontendOpts(), Compiler.getCodeGenOpts()); ApplyHeaderSearchOptions(*HeaderInfo, HSOpts, LangOpts, Compiler.getTarget().getTriple()); diff --git a/clang-tools-extra/clangd/ModulesBuilder.cpp b/clang-tools-extra/clangd/ModulesBuilder.cpp index 03c5f5e1b5993..c1878f91b5e16 100644 --- a/clang-tools-extra/clangd/ModulesBuilder.cpp +++ b/clang-tools-extra/clangd/ModulesBuilder.cpp @@ -202,9 +202,10 @@ bool IsModuleFileUpToDate(PathRef ModuleFilePath, HeaderSearch HeaderInfo(HSOpts, SourceMgr, *Diags, LangOpts, /*Target=*/nullptr); + PreprocessorOptions PPOpts; TrivialModuleLoader ModuleLoader; - Preprocessor PP(std::make_shared<PreprocessorOptions>(), *Diags, LangOpts, - SourceMgr, HeaderInfo, ModuleLoader); + Preprocessor PP(PPOpts, *Diags, LangOpts, SourceMgr, HeaderInfo, + ModuleLoader); IntrusiveRefCntPtr<ModuleCache> ModCache = createCrossProcessModuleCache(); PCHContainerOperations PCHOperations; diff --git a/clang/include/clang/Frontend/CompilerInvocation.h b/clang/include/clang/Frontend/CompilerInvocation.h index 1e4d2da86c2be..f71d27813b2a1 100644 --- a/clang/include/clang/Frontend/CompilerInvocation.h +++ b/clang/include/clang/Frontend/CompilerInvocation.h @@ -272,9 +272,6 @@ class CompilerInvocation : public CompilerInvocationBase { std::shared_ptr<HeaderSearchOptions> getHeaderSearchOptsPtr() { return HSOpts; } - std::shared_ptr<PreprocessorOptions> getPreprocessorOptsPtr() { - return PPOpts; - } std::shared_ptr<LangOptions> getLangOptsPtr() { return LangOpts; } /// @} diff --git a/clang/include/clang/Lex/Preprocessor.h b/clang/include/clang/Lex/Preprocessor.h index 4fdc4e0439125..24bb524783e93 100644 --- a/clang/include/clang/Lex/Preprocessor.h +++ b/clang/include/clang/Lex/Preprocessor.h @@ -140,7 +140,7 @@ class Preprocessor { friend class VariadicMacroScopeGuard; llvm::unique_function<void(const clang::Token &)> OnToken; - std::shared_ptr<const PreprocessorOptions> PPOpts; + const PreprocessorOptions &PPOpts; DiagnosticsEngine *Diags; const LangOptions &LangOpts; const TargetInfo *Target = nullptr; @@ -1165,10 +1165,9 @@ class Preprocessor { void updateOutOfDateIdentifier(const IdentifierInfo &II) const; public: - Preprocessor(std::shared_ptr<const PreprocessorOptions> PPOpts, - DiagnosticsEngine &diags, const LangOptions &LangOpts, - SourceManager &SM, HeaderSearch &Headers, - ModuleLoader &TheModuleLoader, + Preprocessor(const PreprocessorOptions &PPOpts, DiagnosticsEngine &diags, + const LangOptions &LangOpts, SourceManager &SM, + HeaderSearch &Headers, ModuleLoader &TheModuleLoader, IdentifierInfoLookup *IILookup = nullptr, bool OwnsHeaderSearch = false, TranslationUnitKind TUKind = TU_Complete); @@ -1195,9 +1194,8 @@ class Preprocessor { /// Cleanup after model file parsing void FinalizeForModelFile(); - /// Retrieve the preprocessor options used to initialize this - /// preprocessor. - const PreprocessorOptions &getPreprocessorOpts() const { return *PPOpts; } + /// Retrieve the preprocessor options used to initialize this preprocessor. + const PreprocessorOptions &getPreprocessorOpts() const { return PPOpts; } DiagnosticsEngine &getDiagnostics() const { return *Diags; } void setDiagnostics(DiagnosticsEngine &D) { Diags = &D; } diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 0a5f1cfd1a264..04ddc93415507 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -844,7 +844,7 @@ std::unique_ptr<ASTUnit> ASTUnit::LoadFromASTFile( HeaderSearch &HeaderInfo = *AST->HeaderInfo; AST->PP = std::make_shared<Preprocessor>( - AST->PPOpts, AST->getDiagnostics(), *AST->LangOpts, + *AST->PPOpts, AST->getDiagnostics(), *AST->LangOpts, AST->getSourceManager(), HeaderInfo, AST->ModuleLoader, /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 91093d3ccb84c..9cab17ae70eeb 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -452,7 +452,7 @@ void CompilerInstance::createPreprocessor(TranslationUnitKind TUKind) { HeaderSearch *HeaderInfo = new HeaderSearch(getHeaderSearchOpts(), getSourceManager(), getDiagnostics(), getLangOpts(), &getTarget()); - PP = std::make_shared<Preprocessor>(Invocation->getPreprocessorOptsPtr(), + PP = std::make_shared<Preprocessor>(Invocation->getPreprocessorOpts(), getDiagnostics(), getLangOpts(), getSourceManager(), *HeaderInfo, *this, /*IdentifierInfoLookup=*/nullptr, diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index a29b73f97ab7e..0b53524e23641 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -1154,7 +1154,7 @@ Preprocessor::LookupEmbedFile(StringRef Filename, bool isAngled, bool OpenFile, } } - for (const auto &Entry : PPOpts->EmbedEntries) { + for (const auto &Entry : PPOpts.EmbedEntries) { LookupPath.clear(); SeparateComponents(LookupPath, Entry, Filename, false); llvm::Expected<FileEntryRef> ShouldBeEntry = FM.getFileRef( @@ -2341,7 +2341,7 @@ Preprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport( enum { Enter, Import, Skip, IncludeLimitReached } Action = Enter; - if (PPOpts->SingleFileParseMode) + if (PPOpts.SingleFileParseMode) Action = IncludeLimitReached; // If we've reached the max allowed include depth, it is usually due to an @@ -3420,11 +3420,11 @@ void Preprocessor::HandleIfdefDirective(Token &Result, Callbacks->Ifdef(DirectiveTok.getLocation(), MacroNameTok, MD); } - bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && + bool RetainExcludedCB = PPOpts.RetainExcludedConditionalBlocks && getSourceManager().isInMainFile(DirectiveTok.getLocation()); // Should we include the stuff contained by this directive? - if (PPOpts->SingleFileParseMode && !MI) { + if (PPOpts.SingleFileParseMode && !MI) { // In 'single-file-parse mode' undefined identifiers trigger parsing of all // the directive blocks. CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(), @@ -3475,11 +3475,11 @@ void Preprocessor::HandleIfDirective(Token &IfToken, IfToken.getLocation(), DER.ExprRange, (ConditionalTrue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False)); - bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && + bool RetainExcludedCB = PPOpts.RetainExcludedConditionalBlocks && getSourceManager().isInMainFile(IfToken.getLocation()); // Should we include the stuff contained by this directive? - if (PPOpts->SingleFileParseMode && DER.IncludedUndefinedIds) { + if (PPOpts.SingleFileParseMode && DER.IncludedUndefinedIds) { // In 'single-file-parse mode' undefined identifiers trigger parsing of all // the directive blocks. CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false, @@ -3546,10 +3546,10 @@ void Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) { if (Callbacks) Callbacks->Else(Result.getLocation(), CI.IfLoc); - bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && + bool RetainExcludedCB = PPOpts.RetainExcludedConditionalBlocks && getSourceManager().isInMainFile(Result.getLocation()); - if ((PPOpts->SingleFileParseMode && !CI.FoundNonSkip) || RetainExcludedCB) { + if ((PPOpts.SingleFileParseMode && !CI.FoundNonSkip) || RetainExcludedCB) { // In 'single-file-parse mode' undefined identifiers trigger parsing of all // the directive blocks. CurPPLexer->pushConditionalLevel(CI.IfLoc, /*wasskip*/false, @@ -3626,10 +3626,10 @@ void Preprocessor::HandleElifFamilyDirective(Token &ElifToken, } } - bool RetainExcludedCB = PPOpts->RetainExcludedConditionalBlocks && + bool RetainExcludedCB = PPOpts.RetainExcludedConditionalBlocks && getSourceManager().isInMainFile(ElifToken.getLocation()); - if ((PPOpts->SingleFileParseMode && !CI.FoundNonSkip) || RetainExcludedCB) { + if ((PPOpts.SingleFileParseMode && !CI.FoundNonSkip) || RetainExcludedCB) { // In 'single-file-parse mode' undefined identifiers trigger parsing of all // the directive blocks. CurPPLexer->pushConditionalLevel(ElifToken.getLocation(), /*wasskip*/false, diff --git a/clang/lib/Lex/PPLexerChange.cpp b/clang/lib/Lex/PPLexerChange.cpp index e1dcc5499170e..a373a52506a24 100644 --- a/clang/lib/Lex/PPLexerChange.cpp +++ b/clang/lib/Lex/PPLexerChange.cpp @@ -561,7 +561,7 @@ bool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) { if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) { // Reached the end of the compilation without finding the through header. Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) - << PPOpts->PCHThroughHeader << 0; + << PPOpts.PCHThroughHeader << 0; } if (!isIncrementalProcessingEnabled()) diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index ff99575dc611b..c25a3efd899e0 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -77,13 +77,13 @@ LLVM_INSTANTIATE_REGISTRY(PragmaHandlerRegistry) ExternalPreprocessorSource::~ExternalPreprocessorSource() = default; -Preprocessor::Preprocessor(std::shared_ptr<const PreprocessorOptions> PPOpts, +Preprocessor::Preprocessor(const PreprocessorOptions &PPOpts, DiagnosticsEngine &diags, const LangOptions &opts, SourceManager &SM, HeaderSearch &Headers, ModuleLoader &TheModuleLoader, IdentifierInfoLookup *IILookup, bool OwnsHeaders, TranslationUnitKind TUKind) - : PPOpts(std::move(PPOpts)), Diags(&diags), LangOpts(opts), + : PPOpts(PPOpts), Diags(&diags), LangOpts(opts), FileMgr(Headers.getFileMgr()), SourceMgr(SM), ScratchBuf(new ScratchBuffer(SourceMgr)), HeaderInfo(Headers), TheModuleLoader(TheModuleLoader), ExternalSource(nullptr), @@ -156,11 +156,11 @@ Preprocessor::Preprocessor(std::shared_ptr<const PreprocessorOptions> PPOpts, SkippingUntilPragmaHdrStop = true; // If using a PCH with a through header, start skipping tokens. - if (!this->PPOpts->PCHThroughHeader.empty() && - !this->PPOpts->ImplicitPCHInclude.empty()) + if (!this->PPOpts.PCHThroughHeader.empty() && + !this->PPOpts.ImplicitPCHInclude.empty()) SkippingUntilPCHThroughHeader = true; - if (this->PPOpts->GeneratePreamble) + if (this->PPOpts.GeneratePreamble) PreambleConditionalStack.startRecording(); MaxTokens = LangOpts.MaxTokens; @@ -577,18 +577,18 @@ void Preprocessor::EnterMainSourceFile() { // Start parsing the predefines. EnterSourceFile(FID, nullptr, SourceLocation()); - if (!PPOpts->PCHThroughHeader.empty()) { + if (!PPOpts.PCHThroughHeader.empty()) { // Lookup and save the FileID for the through header. If it isn't found // in the search path, it's a fatal error. OptionalFileEntryRef File = LookupFile( - SourceLocation(), PPOpts->PCHThroughHeader, + SourceLocation(), PPOpts.PCHThroughHeader, /*isAngled=*/false, /*FromDir=*/nullptr, /*FromFile=*/nullptr, /*CurDir=*/nullptr, /*SearchPath=*/nullptr, /*RelativePath=*/nullptr, /*SuggestedModule=*/nullptr, /*IsMapped=*/nullptr, /*IsFrameworkFound=*/nullptr); if (!File) { Diag(SourceLocation(), diag::err_pp_through_header_not_found) - << PPOpts->PCHThroughHeader; + << PPOpts.PCHThroughHeader; return; } setPCHThroughHeaderFileID( @@ -614,21 +614,21 @@ bool Preprocessor::isPCHThroughHeader(const FileEntry *FE) { } bool Preprocessor::creatingPCHWithThroughHeader() { - return TUKind == TU_Prefix && !PPOpts->PCHThroughHeader.empty() && + return TUKind == TU_Prefix && !PPOpts.PCHThroughHeader.empty() && PCHThroughHeaderFileID.isValid(); } bool Preprocessor::usingPCHWithThroughHeader() { - return TUKind != TU_Prefix && !PPOpts->PCHThroughHeader.empty() && + return TUKind != TU_Prefix && !PPOpts.PCHThroughHeader.empty() && PCHThroughHeaderFileID.isValid(); } bool Preprocessor::creatingPCHWithPragmaHdrStop() { - return TUKind == TU_Prefix && PPOpts->PCHWithHdrStop; + return TUKind == TU_Prefix && PPOpts.PCHWithHdrStop; } bool Preprocessor::usingPCHWithPragmaHdrStop() { - return TUKind != TU_Prefix && PPOpts->PCHWithHdrStop; + return TUKind != TU_Prefix && PPOpts.PCHWithHdrStop; } /// Skip tokens until after the #include of the through header or @@ -657,8 +657,8 @@ void Preprocessor::SkipTokensWhileUsingPCH() { if (ReachedMainFileEOF) { if (UsingPCHThroughHeader) Diag(SourceLocation(), diag::err_pp_through_header_not_seen) - << PPOpts->PCHThroughHeader << 1; - else if (!PPOpts->PCHWithHdrStopCreate) + << PPOpts.PCHThroughHeader << 1; + else if (!PPOpts.PCHWithHdrStopCreate) Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen); } } diff --git a/clang/unittests/Analysis/MacroExpansionContextTest.cpp b/clang/unittests/Analysis/MacroExpansionContextTest.cpp index 48db9d46180ab..19074d7dcfdd4 100644 --- a/clang/unittests/Analysis/MacroExpansionContextTest.cpp +++ b/clang/unittests/Analysis/MacroExpansionContextTest.cpp @@ -60,11 +60,10 @@ class MacroExpansionContextTest : public ::testing::Test { SourceMgr.setMainFileID(SourceMgr.createFileID(std::move(Buf))); HeaderSearchOptions HSOpts; TrivialModuleLoader ModLoader; + PreprocessorOptions PPOpts; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); PP.Initialize(*Target); auto Ctx = std::make_unique<MacroExpansionContext>(LangOpts); diff --git a/clang/unittests/Basic/SourceManagerTest.cpp b/clang/unittests/Basic/SourceManagerTest.cpp index 1f2dba6fcc5d8..201c3f9a68d1d 100644 --- a/clang/unittests/Basic/SourceManagerTest.cpp +++ b/clang/unittests/Basic/SourceManagerTest.cpp @@ -136,12 +136,11 @@ TEST_F(SourceManagerTest, isBeforeInTranslationUnit) { SourceMgr.setMainFileID(mainFileID); HeaderSearchOptions HSOpts; + PreprocessorOptions PPOpts; TrivialModuleLoader ModLoader; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, &*Target); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup =*/nullptr, /*OwnsHeaderSearch =*/false); PP.Initialize(*Target); PP.EnterMainSourceFile(); @@ -186,12 +185,11 @@ TEST_F(SourceManagerTest, isBeforeInTranslationUnitWithTokenSplit) { SourceMgr.createFileID(llvm::MemoryBuffer::getMemBuffer(main))); HeaderSearchOptions HSOpts; + PreprocessorOptions PPOpts; TrivialModuleLoader ModLoader; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, &*Target); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); PP.Initialize(*Target); PP.EnterMainSourceFile(); llvm::SmallString<8> Scratch; @@ -462,11 +460,10 @@ TEST_F(SourceManagerTest, ResetsIncludeLocMap) { auto ParseFile = [&] { TrivialModuleLoader ModLoader; HeaderSearchOptions HSOpts; + PreprocessorOptions PPOpts; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, &*Target); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); PP.Initialize(*Target); PP.EnterMainSourceFile(); PP.LexTokensUntilEOF(); @@ -538,13 +535,12 @@ TEST_F(SourceManagerTest, getMacroArgExpandedLocation) { SourceMgr.overrideFileContents(headerFile, std::move(HeaderBuf)); HeaderSearchOptions HSOpts; + PreprocessorOptions PPOpts; TrivialModuleLoader ModLoader; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, &*Target); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); // Ensure we can get expanded locations in presence of implicit includes. // These are diff erent than normal includes since predefines buffer doesn't // have a valid insertion location. @@ -657,12 +653,11 @@ TEST_F(SourceManagerTest, isBeforeInTranslationUnitWithMacroInInclude) { SourceMgr.overrideFileContents(headerFile, std::move(HeaderBuf)); HeaderSearchOptions HSOpts; + PreprocessorOptions PPOpts; TrivialModuleLoader ModLoader; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, &*Target); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); PP.Initialize(*Target); std::vector<MacroAction> Macros; diff --git a/clang/unittests/Lex/LexerTest.cpp b/clang/unittests/Lex/LexerTest.cpp index 96a07173e4bcc..3bbc571ee5307 100644 --- a/clang/unittests/Lex/LexerTest.cpp +++ b/clang/unittests/Lex/LexerTest.cpp @@ -59,9 +59,9 @@ class LexerTest : public ::testing::Test { HeaderSearchOptions HSOpts; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); + PreprocessorOptions PPOpts; std::unique_ptr<Preprocessor> PP = std::make_unique<Preprocessor>( - std::make_shared<PreprocessorOptions>(), Diags, LangOpts, SourceMgr, - HeaderInfo, ModLoader, + PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, /*IILookup =*/nullptr, /*OwnsHeaderSearch =*/false); PP->Initialize(*Target); diff --git a/clang/unittests/Lex/ModuleDeclStateTest.cpp b/clang/unittests/Lex/ModuleDeclStateTest.cpp index 16e726b9699fd..5b2719d36de85 100644 --- a/clang/unittests/Lex/ModuleDeclStateTest.cpp +++ b/clang/unittests/Lex/ModuleDeclStateTest.cpp @@ -77,11 +77,10 @@ class ModuleDeclStateTest : public ::testing::Test { HeaderInfo.emplace(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); - return std::make_unique<Preprocessor>( - std::make_shared<PreprocessorOptions>(), Diags, LangOpts, SourceMgr, - *HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + return std::make_unique<Preprocessor>(PPOpts, Diags, LangOpts, SourceMgr, + *HeaderInfo, ModLoader, + /*IILookup=*/nullptr, + /*OwnsHeaderSearch=*/false); } void preprocess(Preprocessor &PP, std::unique_ptr<PPCallbacks> C) { @@ -103,6 +102,7 @@ class ModuleDeclStateTest : public ::testing::Test { TrivialModuleLoader ModLoader; HeaderSearchOptions HSOpts; std::optional<HeaderSearch> HeaderInfo; + PreprocessorOptions PPOpts; }; TEST_F(ModuleDeclStateTest, NamedModuleInterface) { diff --git a/clang/unittests/Lex/PPCallbacksTest.cpp b/clang/unittests/Lex/PPCallbacksTest.cpp index 735ff11bf92de..5b1e25ce9bdd5 100644 --- a/clang/unittests/Lex/PPCallbacksTest.cpp +++ b/clang/unittests/Lex/PPCallbacksTest.cpp @@ -199,10 +199,9 @@ class PPCallbacksTest : public ::testing::Test { HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); AddFakeHeader(HeaderInfo, HeaderPath, SystemHeader); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + PreprocessorOptions PPOpts; + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); return InclusionDirectiveCallback(PP)->FilenameRange; } @@ -218,10 +217,9 @@ class PPCallbacksTest : public ::testing::Test { HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); AddFakeHeader(HeaderInfo, HeaderPath, SystemHeader); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + PreprocessorOptions PPOpts; + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); return InclusionDirectiveCallback(PP)->FileType; } @@ -246,10 +244,9 @@ class PPCallbacksTest : public ::testing::Test { llvm::MemoryBuffer::getMemBuffer(SourceText); SourceMgr.setMainFileID(SourceMgr.createFileID(std::move(Buf))); HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + PreprocessorOptions PPOpts; + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); PP.Initialize(*Target); auto *Callbacks = new CondDirectiveCallbacks; PP.addPPCallbacks(std::unique_ptr<PPCallbacks>(Callbacks)); @@ -269,12 +266,12 @@ class PPCallbacksTest : public ::testing::Test { HeaderSearchOptions HSOpts; TrivialModuleLoader ModLoader; + PreprocessorOptions PPOpts; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, /*IILookup=*/nullptr, - /*OwnsHeaderSearch=*/false); + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, + /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); PP.Initialize(*Target); auto *Callbacks = new PragmaMarkCallbacks; @@ -298,13 +295,14 @@ class PPCallbacksTest : public ::testing::Test { HeaderSearchOptions HSOpts; TrivialModuleLoader ModLoader; + PreprocessorOptions PPOpts; + HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, OpenCLLangOpts, Target.get()); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, - OpenCLLangOpts, SourceMgr, HeaderInfo, ModLoader, - /*IILookup =*/nullptr, - /*OwnsHeaderSearch =*/false); + Preprocessor PP(PPOpts, Diags, OpenCLLangOpts, SourceMgr, HeaderInfo, + ModLoader, /*IILookup=*/nullptr, + /*OwnsHeaderSearch=*/false); PP.Initialize(*Target); // parser actually sets correct pragma handlers for preprocessor @@ -436,14 +434,13 @@ TEST_F(PPCallbacksTest, FileNotFoundSkipped) { HeaderSearchOptions HSOpts; TrivialModuleLoader ModLoader; + PreprocessorOptions PPOpts; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); DiagnosticConsumer *DiagConsumer = new DiagnosticConsumer; DiagnosticsEngine FileNotFoundDiags(DiagID, DiagOpts.get(), DiagConsumer); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), FileNotFoundDiags, - LangOpts, SourceMgr, HeaderInfo, ModLoader, - /*IILookup=*/nullptr, - /*OwnsHeaderSearch=*/false); + Preprocessor PP(PPOpts, FileNotFoundDiags, LangOpts, SourceMgr, HeaderInfo, + ModLoader, /*IILookup=*/nullptr, /*OwnsHeaderSearch=*/false); PP.Initialize(*Target); class FileNotFoundCallbacks : public PPCallbacks { diff --git a/clang/unittests/Lex/PPConditionalDirectiveRecordTest.cpp b/clang/unittests/Lex/PPConditionalDirectiveRecordTest.cpp index 112321f7a8d54..349490aa7eef5 100644 --- a/clang/unittests/Lex/PPConditionalDirectiveRecordTest.cpp +++ b/clang/unittests/Lex/PPConditionalDirectiveRecordTest.cpp @@ -76,8 +76,8 @@ TEST_F(PPConditionalDirectiveRecordTest, PPRecAPI) { HeaderSearchOptions HSOpts; TrivialModuleLoader ModLoader; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, + PreprocessorOptions PPOpts; + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, /*IILookup =*/nullptr, /*OwnsHeaderSearch =*/false); PP.Initialize(*Target); diff --git a/clang/unittests/Lex/PPDependencyDirectivesTest.cpp b/clang/unittests/Lex/PPDependencyDirectivesTest.cpp index 8f925bde7920c..03f1432d990cb 100644 --- a/clang/unittests/Lex/PPDependencyDirectivesTest.cpp +++ b/clang/unittests/Lex/PPDependencyDirectivesTest.cpp @@ -116,8 +116,8 @@ TEST_F(PPDependencyDirectivesTest, MacroGuard) { return llvm::ArrayRef(DepDirectivesObjects.back()->Directives); }; - auto PPOpts = std::make_shared<PreprocessorOptions>(); - PPOpts->DependencyDirectivesForFile = [&](FileEntryRef File) + PreprocessorOptions PPOpts; + PPOpts.DependencyDirectivesForFile = [&](FileEntryRef File) -> std::optional<ArrayRef<dependency_directives_scan::Directive>> { return getDependencyDirectives(File); }; diff --git a/clang/unittests/Lex/PPMemoryAllocationsTest.cpp b/clang/unittests/Lex/PPMemoryAllocationsTest.cpp index b1c9a5ba8188e..ecbd7f47a2c88 100644 --- a/clang/unittests/Lex/PPMemoryAllocationsTest.cpp +++ b/clang/unittests/Lex/PPMemoryAllocationsTest.cpp @@ -68,8 +68,8 @@ TEST_F(PPMemoryAllocationsTest, PPMacroDefinesAllocations) { HeaderSearchOptions HSOpts; TrivialModuleLoader ModLoader; HeaderSearch HeaderInfo(HSOpts, SourceMgr, Diags, LangOpts, Target.get()); - Preprocessor PP(std::make_shared<PreprocessorOptions>(), Diags, LangOpts, - SourceMgr, HeaderInfo, ModLoader, + PreprocessorOptions PPOpts; + Preprocessor PP(PPOpts, Diags, LangOpts, SourceMgr, HeaderInfo, ModLoader, /*IILookup =*/nullptr, /*OwnsHeaderSearch =*/false); PP.Initialize(*Target); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits