[clang-tidy] Static Analyzer checker configuration options pass-through.

Reviewed by: Alexander Kornienko

Differential Revision: http://reviews.llvm.org/D8164

llvm-svn: 231941
This commit is contained in:
Gabor Horvath 2015-03-11 17:25:22 +00:00
parent 29f342c6b5
commit 343832181b
2 changed files with 31 additions and 0 deletions

View File

@ -204,6 +204,17 @@ ClangTidyASTConsumerFactory::ClangTidyASTConsumerFactory(
}
}
static void setStaticAnalyzerCheckerOpts(const ClangTidyOptions &Opts,
AnalyzerOptionsRef AnalyzerOptions) {
StringRef AnalyzerPrefix(AnalyzerCheckNamePrefix);
for (const auto &Opt : Opts.CheckOptions) {
StringRef OptName(Opt.first);
if (!OptName.startswith(AnalyzerPrefix))
continue;
AnalyzerOptions->Config[OptName.substr(AnalyzerPrefix.size())] = Opt.second;
}
}
std::unique_ptr<clang::ASTConsumer>
ClangTidyASTConsumerFactory::CreateASTConsumer(
clang::CompilerInstance &Compiler, StringRef File) {
@ -241,6 +252,7 @@ ClangTidyASTConsumerFactory::CreateASTConsumer(
GlobList &Filter = Context.getChecksFilter();
AnalyzerOptions->CheckersControlList = getCheckersControlList(Filter);
if (!AnalyzerOptions->CheckersControlList.empty()) {
setStaticAnalyzerCheckerOpts(Context.getOptions(), AnalyzerOptions);
AnalyzerOptions->AnalysisStoreOpt = RegionStoreModel;
AnalyzerOptions->AnalysisDiagOpt = PD_NONE;
AnalyzerOptions->AnalyzeNestedBlocks = true;

View File

@ -0,0 +1,19 @@
// RUN: clang-tidy %s -checks='-*,clang-analyzer-unix.Malloc' -config='{CheckOptions: [{ key: "clang-analyzer-unix.Malloc:Optimistic", value: true}]}' -- | FileCheck %s
typedef __typeof(sizeof(int)) size_t;
void *malloc(size_t);
void free(void *);
void __attribute((ownership_returns(malloc))) *my_malloc(size_t);
void __attribute((ownership_takes(malloc, 1))) my_free(void *);
void f1() {
void *p = malloc(12);
return;
// CHECK: warning: Potential leak of memory pointed to by 'p' [clang-analyzer-unix.Malloc]
}
void af2() {
void *p = my_malloc(12);
my_free(p);
free(p);
// CHECK: warning: Attempt to free released memory [clang-analyzer-unix.Malloc]
}