mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-08 18:37:11 +00:00
[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:
parent
29f342c6b5
commit
343832181b
@ -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;
|
||||
|
19
clang-tools-extra/test/clang-tidy/static-analyzer-config.cpp
Normal file
19
clang-tools-extra/test/clang-tidy/static-analyzer-config.cpp
Normal 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]
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user