diff options
author | Ilya Biryukov <ibiryukov@google.com> | 2017-12-15 11:27:51 +0000 |
---|---|---|
committer | Ilya Biryukov <ibiryukov@google.com> | 2017-12-15 11:27:51 +0000 |
commit | 41e90bcb77a266f15d891127f4bd67a78c56b76a (patch) | |
tree | 1e701956f1d14562e95d02087a9880ff1544e660 /clang/lib | |
parent | 96ca4f5e91e7c1ab640b99cc85d03284af4b3747 (diff) | |
download | bcm5719-llvm-41e90bcb77a266f15d891127f4bd67a78c56b76a.tar.gz bcm5719-llvm-41e90bcb77a266f15d891127f4bd67a78c56b76a.zip |
[clang] Add PPCallbacks list to preprocessor when building a preacompiled preamble.
Summary:
Revision D38639 needs this commit in order to properly make open
definition calls on include statements work.
Patch by William Enright.
Reviewers: malaperle, krasimir, bkramer, ilya-biryukov
Reviewed By: malaperle, ilya-biryukov
Subscribers: cfe-commits, arphaman, ilya-biryukov
Differential Revision: https://reviews.llvm.org/D39375
llvm-svn: 320804
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 5 | ||||
-rw-r--r-- | clang/lib/Frontend/PrecompiledPreamble.cpp | 25 |
2 files changed, 10 insertions, 20 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index f7da9b90475..1160df15a92 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -970,9 +970,8 @@ public: } } - void HandleMacroDefined(const Token &MacroNameTok, - const MacroDirective *MD) override { - AddDefinedMacroToHash(MacroNameTok, Hash); + std::unique_ptr<PPCallbacks> createPPCallbacks() override { + return llvm::make_unique<MacroDefinitionTrackerPPCallbacks>(Hash); } private: diff --git a/clang/lib/Frontend/PrecompiledPreamble.cpp b/clang/lib/Frontend/PrecompiledPreamble.cpp index c6ee4d0289d..f6964d02b23 100644 --- a/clang/lib/Frontend/PrecompiledPreamble.cpp +++ b/clang/lib/Frontend/PrecompiledPreamble.cpp @@ -115,19 +115,6 @@ void TemporaryFiles::removeFile(StringRef File) { llvm::sys::fs::remove(File); } -class PreambleMacroCallbacks : public PPCallbacks { -public: - PreambleMacroCallbacks(PreambleCallbacks &Callbacks) : Callbacks(Callbacks) {} - - void MacroDefined(const Token &MacroNameTok, - const MacroDirective *MD) override { - Callbacks.HandleMacroDefined(MacroNameTok, MD); - } - -private: - PreambleCallbacks &Callbacks; -}; - class PrecompilePreambleAction : public ASTFrontendAction { public: PrecompilePreambleAction(std::string *InMemStorage, @@ -213,8 +200,6 @@ PrecompilePreambleAction::CreateASTConsumer(CompilerInstance &CI, if (!CI.getFrontendOpts().RelocatablePCH) Sysroot.clear(); - CI.getPreprocessor().addPPCallbacks( - llvm::make_unique<PreambleMacroCallbacks>(Callbacks)); return llvm::make_unique<PrecompilePreambleConsumer>( *this, CI.getPreprocessor(), Sysroot, std::move(OS)); } @@ -351,6 +336,11 @@ llvm::ErrorOr<PrecompiledPreamble> PrecompiledPreamble::Build( if (!Act->BeginSourceFile(*Clang.get(), Clang->getFrontendOpts().Inputs[0])) return BuildPreambleError::BeginSourceFileFailed; + std::unique_ptr<PPCallbacks> DelegatedPPCallbacks = + Callbacks.createPPCallbacks(); + if (DelegatedPPCallbacks) + Clang->getPreprocessor().addPPCallbacks(std::move(DelegatedPPCallbacks)); + Act->Execute(); // Run the callbacks. @@ -707,8 +697,9 @@ void PrecompiledPreamble::setupPreambleStorage( void PreambleCallbacks::AfterExecute(CompilerInstance &CI) {} void PreambleCallbacks::AfterPCHEmitted(ASTWriter &Writer) {} void PreambleCallbacks::HandleTopLevelDecl(DeclGroupRef DG) {} -void PreambleCallbacks::HandleMacroDefined(const Token &MacroNameTok, - const MacroDirective *MD) {} +std::unique_ptr<PPCallbacks> PreambleCallbacks::createPPCallbacks() { + return nullptr; +} std::error_code clang::make_error_code(BuildPreambleError Error) { return std::error_code(static_cast<int>(Error), BuildPreambleErrorCategory()); |