diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2020-07-31 21:22:58 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2020-07-31 21:22:58 +0000 |
| commit | 5ffd83dbcc34f10e07f6d3e968ae6365869615f4 (patch) | |
| tree | 0e9f5cf729dde39f949698fddef45a34e2bc7f44 /contrib/llvm-project/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp | |
| parent | 1799696096df87b52968b8996d00c91e0a5de8d9 (diff) | |
| parent | cfca06d7963fa0909f90483b42a6d7d194d01e08 (diff) | |
Notes
Diffstat (limited to 'contrib/llvm-project/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp')
| -rw-r--r-- | contrib/llvm-project/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/contrib/llvm-project/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp b/contrib/llvm-project/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp index 7285d27495a7..b5c9356322fc 100644 --- a/contrib/llvm-project/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp +++ b/contrib/llvm-project/clang/lib/StaticAnalyzer/Checkers/StackAddrEscapeChecker.cpp @@ -43,6 +43,7 @@ public: }; DefaultBool ChecksEnabled[CK_NumCheckKinds]; + CheckerNameRef CheckNames[CK_NumCheckKinds]; void checkPreCall(const CallEvent &Call, CheckerContext &C) const; void checkPreStmt(const ReturnStmt *RS, CheckerContext &C) const; @@ -156,7 +157,8 @@ void StackAddrEscapeChecker::EmitStackError(CheckerContext &C, return; if (!BT_returnstack) BT_returnstack = std::make_unique<BuiltinBug>( - this, "Return of address to stack-allocated memory"); + CheckNames[CK_StackAddrEscapeChecker], + "Return of address to stack-allocated memory"); // Generate a report for this bug. SmallString<128> buf; llvm::raw_svector_ostream os(buf); @@ -195,7 +197,8 @@ void StackAddrEscapeChecker::checkAsyncExecutedBlockCaptures( continue; if (!BT_capturedstackasync) BT_capturedstackasync = std::make_unique<BuiltinBug>( - this, "Address of stack-allocated memory is captured"); + CheckNames[CK_StackAddrAsyncEscapeChecker], + "Address of stack-allocated memory is captured"); SmallString<128> Buf; llvm::raw_svector_ostream Out(Buf); SourceRange Range = genName(Out, Region, C.getASTContext()); @@ -218,7 +221,8 @@ void StackAddrEscapeChecker::checkReturnedBlockCaptures( continue; if (!BT_capturedstackret) BT_capturedstackret = std::make_unique<BuiltinBug>( - this, "Address of stack-allocated memory is captured"); + CheckNames[CK_StackAddrEscapeChecker], + "Address of stack-allocated memory is captured"); SmallString<128> Buf; llvm::raw_svector_ostream Out(Buf); SourceRange Range = genName(Out, Region, C.getASTContext()); @@ -277,7 +281,7 @@ void StackAddrEscapeChecker::checkPreStmt(const ReturnStmt *RS, // The CK_CopyAndAutoreleaseBlockObject cast causes the block to be copied // so the stack address is not escaping here. - if (auto *ICE = dyn_cast<ImplicitCastExpr>(RetE)) { + if (const auto *ICE = dyn_cast<ImplicitCastExpr>(RetE)) { if (isa<BlockDataRegion>(R) && ICE->getCastKind() == CK_CopyAndAutoreleaseBlockObject) { return; @@ -333,7 +337,8 @@ void StackAddrEscapeChecker::checkEndFunction(const ReturnStmt *RS, if (!BT_stackleak) BT_stackleak = std::make_unique<BuiltinBug>( - this, "Stack address stored into global variable", + CheckNames[CK_StackAddrEscapeChecker], + "Stack address stored into global variable", "Stack address was saved into a global variable. " "This is dangerous because the address will become " "invalid after returning from the function"); @@ -365,20 +370,19 @@ void ento::registerStackAddrEscapeBase(CheckerManager &mgr) { mgr.registerChecker<StackAddrEscapeChecker>(); } -bool ento::shouldRegisterStackAddrEscapeBase(const LangOptions &LO) { +bool ento::shouldRegisterStackAddrEscapeBase(const CheckerManager &mgr) { return true; } #define REGISTER_CHECKER(name) \ void ento::register##name(CheckerManager &Mgr) { \ - StackAddrEscapeChecker *Chk = \ - Mgr.getChecker<StackAddrEscapeChecker>(); \ + StackAddrEscapeChecker *Chk = Mgr.getChecker<StackAddrEscapeChecker>(); \ Chk->ChecksEnabled[StackAddrEscapeChecker::CK_##name] = true; \ + Chk->CheckNames[StackAddrEscapeChecker::CK_##name] = \ + Mgr.getCurrentCheckerName(); \ } \ \ - bool ento::shouldRegister##name(const LangOptions &LO) { \ - return true; \ - } + bool ento::shouldRegister##name(const CheckerManager &mgr) { return true; } REGISTER_CHECKER(StackAddrEscapeChecker) REGISTER_CHECKER(StackAddrAsyncEscapeChecker) |
