forked from OSchip/llvm-project
[analyzer] Migrate BuiltinFunctionChecker to CheckerV2.
llvm-svn: 126611
This commit is contained in:
parent
b2cf708395
commit
f3ed8b631d
|
@ -11,8 +11,10 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "InternalChecks.h"
|
||||
#include "clang/StaticAnalyzer/Core/PathSensitive/Checker.h"
|
||||
#include "ClangSACheckers.h"
|
||||
#include "clang/StaticAnalyzer/Core/CheckerV2.h"
|
||||
#include "clang/StaticAnalyzer/Core/CheckerManager.h"
|
||||
#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
|
||||
#include "clang/Basic/Builtins.h"
|
||||
|
||||
using namespace clang;
|
||||
|
@ -20,19 +22,15 @@ using namespace ento;
|
|||
|
||||
namespace {
|
||||
|
||||
class BuiltinFunctionChecker : public Checker {
|
||||
class BuiltinFunctionChecker : public CheckerV2<eval::Call> {
|
||||
public:
|
||||
static void *getTag() { static int tag = 0; return &tag; }
|
||||
virtual bool evalCallExpr(CheckerContext &C, const CallExpr *CE);
|
||||
bool evalCall(const CallExpr *CE, CheckerContext &C) const;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
void ento::RegisterBuiltinFunctionChecker(ExprEngine &Eng) {
|
||||
Eng.registerCheck(new BuiltinFunctionChecker());
|
||||
}
|
||||
|
||||
bool BuiltinFunctionChecker::evalCallExpr(CheckerContext &C,const CallExpr *CE){
|
||||
bool BuiltinFunctionChecker::evalCall(const CallExpr *CE,
|
||||
CheckerContext &C) const{
|
||||
const GRState *state = C.getState();
|
||||
const Expr *Callee = CE->getCallee();
|
||||
SVal L = state->getSVal(Callee);
|
||||
|
@ -81,3 +79,7 @@ bool BuiltinFunctionChecker::evalCallExpr(CheckerContext &C,const CallExpr *CE){
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
void ento::registerBuiltinFunctionChecker(CheckerManager &mgr) {
|
||||
mgr.registerChecker<BuiltinFunctionChecker>();
|
||||
}
|
||||
|
|
|
@ -73,16 +73,22 @@ def ObjCUnusedIvarsChecker : Checker<"UnusedIvars">,
|
|||
|
||||
} // end "cocoa"
|
||||
|
||||
let ParentPackage = Core in {
|
||||
|
||||
def BuiltinFunctionChecker : Checker<"BuiltinFunc">,
|
||||
HelpText<"Evaluate clang builtin functions">,
|
||||
DescFile<"BuiltinFunctionChecker.cpp">;
|
||||
|
||||
def StackAddrEscapeChecker : Checker<"StackAddrEscape">,
|
||||
InPackage<Core>,
|
||||
HelpText<"Check that addresses to stack memory do not escape the function">,
|
||||
DescFile<"StackAddrEscapeChecker.cpp">;
|
||||
|
||||
def DeadStoresChecker : Checker<"DeadStores">,
|
||||
InPackage<Core>,
|
||||
HelpText<"Check for values stored to a variables that are never read afterwards">,
|
||||
DescFile<"DeadStoresChecker.cpp">;
|
||||
|
||||
} // end "core"
|
||||
|
||||
def UnixAPIChecker : Checker<"API">,
|
||||
InPackage<Unix>,
|
||||
HelpText<"Check calls to various UNIX/Posix functions">,
|
||||
|
|
|
@ -336,7 +336,6 @@ static void RegisterInternalChecks(ExprEngine &Eng) {
|
|||
|
||||
// This is not a checker yet.
|
||||
RegisterNoReturnFunctionChecker(Eng);
|
||||
RegisterBuiltinFunctionChecker(Eng);
|
||||
}
|
||||
|
||||
ExprEngine::ExprEngine(AnalysisManager &mgr, TransferFuncs *tf)
|
||||
|
|
|
@ -24,7 +24,6 @@ class ExprEngine;
|
|||
// Foundational checks that handle basic semantics.
|
||||
void RegisterAdjustedReturnValueChecker(ExprEngine &Eng);
|
||||
void RegisterAttrNonNullChecker(ExprEngine &Eng);
|
||||
void RegisterBuiltinFunctionChecker(ExprEngine &Eng);
|
||||
void RegisterCallAndMessageChecker(ExprEngine &Eng);
|
||||
void RegisterDereferenceChecker(ExprEngine &Eng);
|
||||
void RegisterDivZeroChecker(ExprEngine &Eng);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-store=region -analyzer-checker=core.experimental.Malloc -fblocks -verify %s
|
||||
// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-store=region -analyzer-checker=core,core.experimental.Malloc -fblocks -verify %s
|
||||
void free(void *);
|
||||
|
||||
void t1 () {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 -Wno-array-bounds -analyze -analyzer-checker=core.experimental -analyzer-check-objc-mem -analyzer-store=region -verify %s
|
||||
// RUN: %clang_cc1 -Wno-array-bounds -analyze -analyzer-checker=core,core.experimental -analyzer-check-objc-mem -analyzer-store=region -verify %s
|
||||
|
||||
typedef __typeof(sizeof(int)) size_t;
|
||||
void *malloc(size_t);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-checker=core.StackAddrEscape -analyzer-store=basic -fblocks -verify %s
|
||||
// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-checker=core.StackAddrEscape -analyzer-store=region -fblocks -verify %s
|
||||
// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-checker=core -analyzer-store=basic -fblocks -verify %s
|
||||
// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-checker=core -analyzer-store=region -fblocks -verify %s
|
||||
|
||||
int* f1() {
|
||||
int x = 0;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-checker=core.StackAddrEscape -analyzer-store region -verify %s
|
||||
// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-checker=core -analyzer-store region -verify %s
|
||||
|
||||
char const *p;
|
||||
|
||||
|
|
Loading…
Reference in New Issue