summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/ClangTidy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clang-tidy/ClangTidy.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/ClangTidy.cpp30
1 files changed, 18 insertions, 12 deletions
diff --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp b/clang-tools-extra/clang-tidy/ClangTidy.cpp
index c9395497bcb..0445710eaa2 100644
--- a/clang-tools-extra/clang-tidy/ClangTidy.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp
@@ -173,8 +173,9 @@ private:
} // namespace
ClangTidyASTConsumerFactory::ClangTidyASTConsumerFactory(
- ClangTidyContext &Context)
- : Context(Context), CheckFactories(new ClangTidyCheckFactories) {
+ ClangTidyContext &Context, const ClangTidyOptions &Options)
+ : Context(Context), CheckFactories(new ClangTidyCheckFactories),
+ Options(Options) {
for (ClangTidyModuleRegistry::iterator I = ClangTidyModuleRegistry::begin(),
E = ClangTidyModuleRegistry::end();
I != E; ++I) {
@@ -207,16 +208,21 @@ clang::ASTConsumer *ClangTidyASTConsumerFactory::CreateASTConsumer(
if (!CheckFactories->empty())
Consumers.push_back(Finder.newASTConsumer());
- AnalyzerOptionsRef Options = Compiler.getAnalyzerOpts();
- Options->CheckersControlList = getCheckersControlList();
- if (!Options->CheckersControlList.empty()) {
- Options->AnalysisStoreOpt = RegionStoreModel;
- Options->AnalysisDiagOpt = PD_NONE;
- Options->AnalyzeNestedBlocks = true;
- Options->eagerlyAssumeBinOpBifurcation = true;
+ AnalyzerOptionsRef AnalyzerOptions = Compiler.getAnalyzerOpts();
+ // FIXME: Remove this option once clang's cfg-temporary-dtors option defaults
+ // to true.
+ AnalyzerOptions->Config["cfg-temporary-dtors"] =
+ Options.AnalyzeTemporaryDtors ? "true" : "false";
+
+ AnalyzerOptions->CheckersControlList = getCheckersControlList();
+ if (!AnalyzerOptions->CheckersControlList.empty()) {
+ AnalyzerOptions->AnalysisStoreOpt = RegionStoreModel;
+ AnalyzerOptions->AnalysisDiagOpt = PD_NONE;
+ AnalyzerOptions->AnalyzeNestedBlocks = true;
+ AnalyzerOptions->eagerlyAssumeBinOpBifurcation = true;
ento::AnalysisASTConsumer *AnalysisConsumer = ento::CreateAnalysisConsumer(
Compiler.getPreprocessor(), Compiler.getFrontendOpts().OutputFile,
- Options, Compiler.getFrontendOpts().Plugins);
+ AnalyzerOptions, Compiler.getFrontendOpts().Plugins);
AnalysisConsumer->AddDiagnosticConsumer(
new AnalyzerDiagnosticConsumer(Context));
Consumers.push_back(AnalysisConsumer);
@@ -288,7 +294,7 @@ void ClangTidyCheck::setName(StringRef Name) {
std::vector<std::string> getCheckNames(const ClangTidyOptions &Options) {
SmallVector<ClangTidyError, 8> Errors;
clang::tidy::ClangTidyContext Context(&Errors, Options);
- ClangTidyASTConsumerFactory Factory(Context);
+ ClangTidyASTConsumerFactory Factory(Context, Options);
return Factory.getCheckNames();
}
@@ -326,7 +332,7 @@ void runClangTidy(const ClangTidyOptions &Options,
ClangTidyASTConsumerFactory *ConsumerFactory;
};
- Tool.run(new ActionFactory(new ClangTidyASTConsumerFactory(Context)));
+ Tool.run(new ActionFactory(new ClangTidyASTConsumerFactory(Context, Options)));
}
void handleErrors(SmallVectorImpl<ClangTidyError> &Errors, bool Fix) {
OpenPOWER on IntegriCloud