diff options
author | Alexander Kornienko <alexfh@google.com> | 2014-02-13 16:10:47 +0000 |
---|---|---|
committer | Alexander Kornienko <alexfh@google.com> | 2014-02-13 16:10:47 +0000 |
commit | 298b3823b58bca118f1a84cc0dc71fe7f8e54eb6 (patch) | |
tree | 41216a38246c7f8e3e55ea505b96491346e740ec | |
parent | efe2f7e2c83473448823bd6f48b1ec31091863fc (diff) | |
download | bcm5719-llvm-298b3823b58bca118f1a84cc0dc71fe7f8e54eb6.tar.gz bcm5719-llvm-298b3823b58bca118f1a84cc0dc71fe7f8e54eb6.zip |
Clang-tidy: don't create ASTConsumers not needed for the set of checks we perform.
Summary:
This doesn't have any significant effect on the performance, but it
looks like a good thing to do.
Reviewers: djasper, klimek
Reviewed By: klimek
CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D2763
llvm-svn: 201340
-rw-r--r-- | clang-tools-extra/clang-tidy/ClangTidy.cpp | 26 | ||||
-rw-r--r-- | clang-tools-extra/clang-tidy/ClangTidyModule.h | 1 |
2 files changed, 17 insertions, 10 deletions
diff --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp b/clang-tools-extra/clang-tidy/ClangTidy.cpp index aec2d98a2f7..6b5a4144f24 100644 --- a/clang-tools-extra/clang-tidy/ClangTidy.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp @@ -152,18 +152,24 @@ clang::ASTConsumer *ClangTidyASTConsumerFactory::CreateASTConsumer( I != E; ++I) (*I)->registerPPCallbacks(Compiler); + SmallVector<ASTConsumer *, 2> Consumers; + if (CheckFactories->empty()) + Consumers.push_back(Finder.newASTConsumer()); + AnalyzerOptionsRef Options = Compiler.getAnalyzerOpts(); Options->CheckersControlList = getCheckersControlList(); - Options->AnalysisStoreOpt = RegionStoreModel; - Options->AnalysisDiagOpt = PD_NONE; - Options->AnalyzeNestedBlocks = true; - Options->eagerlyAssumeBinOpBifurcation = true; - ento::AnalysisASTConsumer *AnalysisConsumer = ento::CreateAnalysisConsumer( - Compiler.getPreprocessor(), Compiler.getFrontendOpts().OutputFile, - Options, Compiler.getFrontendOpts().Plugins); - AnalysisConsumer->AddDiagnosticConsumer( - new AnalyzerDiagnosticConsumer(Context)); - ASTConsumer *Consumers[] = { Finder.newASTConsumer(), AnalysisConsumer }; + if (!Options->CheckersControlList.empty()) { + Options->AnalysisStoreOpt = RegionStoreModel; + Options->AnalysisDiagOpt = PD_NONE; + Options->AnalyzeNestedBlocks = true; + Options->eagerlyAssumeBinOpBifurcation = true; + ento::AnalysisASTConsumer *AnalysisConsumer = ento::CreateAnalysisConsumer( + Compiler.getPreprocessor(), Compiler.getFrontendOpts().OutputFile, + Options, Compiler.getFrontendOpts().Plugins); + AnalysisConsumer->AddDiagnosticConsumer( + new AnalyzerDiagnosticConsumer(Context)); + Consumers.push_back(AnalysisConsumer); + } return new MultiplexConsumer(Consumers); } diff --git a/clang-tools-extra/clang-tidy/ClangTidyModule.h b/clang-tools-extra/clang-tidy/ClangTidyModule.h index 830cbd5b15c..47a69331314 100644 --- a/clang-tools-extra/clang-tidy/ClangTidyModule.h +++ b/clang-tools-extra/clang-tidy/ClangTidyModule.h @@ -90,6 +90,7 @@ public: typedef std::map<std::string, CheckFactoryBase *> FactoryMap; FactoryMap::const_iterator begin() const { return Factories.begin(); } FactoryMap::const_iterator end() const { return Factories.end(); } + bool empty() const { return Factories.empty(); } private: FactoryMap Factories; |