From 6ec90ec2ab69bff816bff52ec02151fe82be8147 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Sat, 9 Jul 2016 12:16:58 +0000 Subject: [analyzer] Older version of GCC 4.7 crash on lambdas in default arguments. llvm-svn: 274975 --- .../Checkers/MallocOverflowSecurityChecker.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'clang/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp') diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp index 4060f01582a..fc2ab1d6e3f 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp @@ -141,15 +141,15 @@ private: return false; } - const Decl *getDecl(const DeclRefExpr *DR) { return DR->getDecl(); } - - const Decl *getDecl(const MemberExpr *ME) { return ME->getMemberDecl(); } + static const Decl *getDecl(const DeclRefExpr *DR) { return DR->getDecl(); } + static const Decl *getDecl(const MemberExpr *ME) { + return ME->getMemberDecl(); + } template void Erase(const T1 *DR, - llvm::function_ref Pred = - [](const MallocOverflowCheck &) { return true; }) { - auto P = [this, DR, Pred](const MallocOverflowCheck &Check) { + llvm::function_ref Pred) { + auto P = [DR, Pred](const MallocOverflowCheck &Check) { if (const auto *CheckDR = dyn_cast(Check.variable)) return getDecl(CheckDR) == getDecl(DR) && Pred(Check); return false; @@ -159,11 +159,12 @@ private: } void CheckExpr(const Expr *E_p) { + auto PredTrue = [](const MallocOverflowCheck &) { return true; }; const Expr *E = E_p->IgnoreParenImpCasts(); if (const DeclRefExpr *DR = dyn_cast(E)) - Erase(DR); + Erase(DR, PredTrue); else if (const auto *ME = dyn_cast(E)) { - Erase(ME); + Erase(ME, PredTrue); } } -- cgit v1.2.3