From 1452ff155bc533c223a5c31aeb75702d609d9f16 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 24 Oct 2012 17:46:57 +0000 Subject: [PATCH] Teach the preprocessor to hold onto the preprocessor options. llvm-svn: 166599 --- clang/include/clang/Lex/Preprocessor.h | 5 ++++- clang/lib/Frontend/ASTUnit.cpp | 4 +++- clang/lib/Frontend/CompilerInstance.cpp | 3 ++- clang/lib/Lex/Preprocessor.cpp | 7 +++++-- clang/unittests/Basic/SourceManagerTest.cpp | 10 ++++------ clang/unittests/Lex/LexerTest.cpp | 4 ++-- clang/unittests/Lex/PreprocessingRecordTest.cpp | 4 ++-- 7 files changed, 22 insertions(+), 15 deletions(-) diff --git a/clang/include/clang/Lex/Preprocessor.h b/clang/include/clang/Lex/Preprocessor.h index 7888a26..6ba7e40 100644 --- a/clang/include/clang/Lex/Preprocessor.h +++ b/clang/include/clang/Lex/Preprocessor.h @@ -55,6 +55,7 @@ class CodeCompletionHandler; class DirectoryLookup; class PreprocessingRecord; class ModuleLoader; +class PreprocessorOptions; /// \brief Stores token information for comparing actual tokens with /// predefined values. Only handles simple tokens and identifiers. @@ -83,6 +84,7 @@ public: /// like the \#include stack, token expansion, etc. /// class Preprocessor : public RefCountedBase { + llvm::IntrusiveRefCntPtr PPOpts; DiagnosticsEngine *Diags; LangOptions &LangOpts; const TargetInfo *Target; @@ -394,7 +396,8 @@ private: // Cached tokens state. MacroInfoChain *MICache; public: - Preprocessor(DiagnosticsEngine &diags, LangOptions &opts, + Preprocessor(llvm::IntrusiveRefCntPtr PPOpts, + DiagnosticsEngine &diags, LangOptions &opts, const TargetInfo *target, SourceManager &SM, HeaderSearch &Headers, ModuleLoader &TheModuleLoader, diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 39b3437..410b7e6 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -27,6 +27,7 @@ #include "clang/Serialization/ASTWriter.h" #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/Preprocessor.h" +#include "clang/Lex/PreprocessorOptions.h" #include "clang/Basic/TargetOptions.h" #include "clang/Basic/TargetInfo.h" #include "clang/Basic/Diagnostic.h" @@ -772,7 +773,8 @@ ASTUnit *ASTUnit::LoadFromASTFile(const std::string &Filename, OwningPtr Reader; - AST->PP = new Preprocessor(AST->getDiagnostics(), AST->ASTFileLangOpts, + AST->PP = new Preprocessor(new PreprocessorOptions(), + AST->getDiagnostics(), AST->ASTFileLangOpts, /*Target=*/0, AST->getSourceManager(), HeaderInfo, *AST, /*IILookup=*/0, diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 4b6a2fc..fca9f0b 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -247,7 +247,8 @@ void CompilerInstance::createPreprocessor() { getDiagnostics(), getLangOpts(), &getTarget()); - PP = new Preprocessor(getDiagnostics(), getLangOpts(), &getTarget(), + PP = new Preprocessor(&getPreprocessorOpts(), + getDiagnostics(), getLangOpts(), &getTarget(), getSourceManager(), *HeaderInfo, *this, PTHMgr, /*OwnsHeaderSearch=*/true); diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index d9f2069..3b070ce 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -26,6 +26,7 @@ //===----------------------------------------------------------------------===// #include "clang/Lex/Preprocessor.h" +#include "clang/Lex/PreprocessorOptions.h" #include "MacroArgs.h" #include "clang/Lex/ExternalPreprocessorSource.h" #include "clang/Lex/HeaderSearch.h" @@ -51,14 +52,16 @@ ExternalPreprocessorSource::~ExternalPreprocessorSource() { } PPMutationListener::~PPMutationListener() { } -Preprocessor::Preprocessor(DiagnosticsEngine &diags, LangOptions &opts, +Preprocessor::Preprocessor(llvm::IntrusiveRefCntPtr PPOpts, + DiagnosticsEngine &diags, LangOptions &opts, const TargetInfo *target, SourceManager &SM, HeaderSearch &Headers, ModuleLoader &TheModuleLoader, IdentifierInfoLookup* IILookup, bool OwnsHeaders, bool DelayInitialization, bool IncrProcessing) - : Diags(&diags), LangOpts(opts), Target(target),FileMgr(Headers.getFileMgr()), + : PPOpts(PPOpts), Diags(&diags), LangOpts(opts), Target(target), + FileMgr(Headers.getFileMgr()), SourceMgr(SM), HeaderInfo(Headers), TheModuleLoader(TheModuleLoader), ExternalSource(0), Identifiers(opts, IILookup), IncrementalProcessing(IncrProcessing), CodeComplete(0), diff --git a/clang/unittests/Basic/SourceManagerTest.cpp b/clang/unittests/Basic/SourceManagerTest.cpp index ae36422..6f404b5 100644 --- a/clang/unittests/Basic/SourceManagerTest.cpp +++ b/clang/unittests/Basic/SourceManagerTest.cpp @@ -18,6 +18,7 @@ #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/HeaderSearchOptions.h" #include "clang/Lex/Preprocessor.h" +#include "clang/Lex/PreprocessorOptions.h" #include "llvm/ADT/SmallString.h" #include "llvm/Config/config.h" @@ -69,8 +70,7 @@ TEST_F(SourceManagerTest, isBeforeInTranslationUnit) { VoidModuleLoader ModLoader; HeaderSearch HeaderInfo(new HeaderSearchOptions, FileMgr, Diags, LangOpts, &*Target); - Preprocessor PP(Diags, LangOpts, - Target.getPtr(), + Preprocessor PP(new PreprocessorOptions(), Diags, LangOpts, Target.getPtr(), SourceMgr, HeaderInfo, ModLoader, /*IILookup =*/ 0, /*OwnsHeaderSearch =*/false, @@ -185,8 +185,7 @@ TEST_F(SourceManagerTest, getMacroArgExpandedLocation) { VoidModuleLoader ModLoader; HeaderSearch HeaderInfo(new HeaderSearchOptions, FileMgr, Diags, LangOpts, &*Target); - Preprocessor PP(Diags, LangOpts, - Target.getPtr(), + Preprocessor PP(new PreprocessorOptions(), Diags, LangOpts, Target.getPtr(), SourceMgr, HeaderInfo, ModLoader, /*IILookup =*/ 0, /*OwnsHeaderSearch =*/false, @@ -283,8 +282,7 @@ TEST_F(SourceManagerTest, isBeforeInTranslationUnitWithMacroInInclude) { VoidModuleLoader ModLoader; HeaderSearch HeaderInfo(new HeaderSearchOptions, FileMgr, Diags, LangOpts, &*Target); - Preprocessor PP(Diags, LangOpts, - Target.getPtr(), + Preprocessor PP(new PreprocessorOptions(), Diags, LangOpts, Target.getPtr(), SourceMgr, HeaderInfo, ModLoader, /*IILookup =*/ 0, /*OwnsHeaderSearch =*/false, diff --git a/clang/unittests/Lex/LexerTest.cpp b/clang/unittests/Lex/LexerTest.cpp index bba6025..e95cd02 100644 --- a/clang/unittests/Lex/LexerTest.cpp +++ b/clang/unittests/Lex/LexerTest.cpp @@ -18,6 +18,7 @@ #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/HeaderSearchOptions.h" #include "clang/Lex/Preprocessor.h" +#include "clang/Lex/PreprocessorOptions.h" #include "llvm/Config/config.h" #include "gtest/gtest.h" @@ -75,8 +76,7 @@ TEST_F(LexerTest, LexAPI) { VoidModuleLoader ModLoader; HeaderSearch HeaderInfo(new HeaderSearchOptions, FileMgr, Diags, LangOpts, Target.getPtr()); - Preprocessor PP(Diags, LangOpts, - Target.getPtr(), + Preprocessor PP(new PreprocessorOptions(), Diags, LangOpts, Target.getPtr(), SourceMgr, HeaderInfo, ModLoader, /*IILookup =*/ 0, /*OwnsHeaderSearch =*/false, diff --git a/clang/unittests/Lex/PreprocessingRecordTest.cpp b/clang/unittests/Lex/PreprocessingRecordTest.cpp index ca420ca..815081a 100644 --- a/clang/unittests/Lex/PreprocessingRecordTest.cpp +++ b/clang/unittests/Lex/PreprocessingRecordTest.cpp @@ -18,6 +18,7 @@ #include "clang/Lex/HeaderSearch.h" #include "clang/Lex/HeaderSearchOptions.h" #include "clang/Lex/Preprocessor.h" +#include "clang/Lex/PreprocessorOptions.h" #include "clang/Lex/PreprocessingRecord.h" #include "llvm/Config/config.h" @@ -86,8 +87,7 @@ TEST_F(PreprocessingRecordTest, PPRecAPI) { VoidModuleLoader ModLoader; HeaderSearch HeaderInfo(new HeaderSearchOptions, FileMgr, Diags, LangOpts, Target.getPtr()); - Preprocessor PP(Diags, LangOpts, - Target.getPtr(), + Preprocessor PP(new PreprocessorOptions(), Diags, LangOpts,Target.getPtr(), SourceMgr, HeaderInfo, ModLoader, /*IILookup =*/ 0, /*OwnsHeaderSearch =*/false, -- 2.7.4