From: Benjamin Kramer Date: Sat, 9 Jul 2016 12:16:58 +0000 (+0000) Subject: [analyzer] Older version of GCC 4.7 crash on lambdas in default arguments. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7935857d54fc4ce53f3c4149affcf4f38af3a4bc;p=clang [analyzer] Older version of GCC 4.7 crash on lambdas in default arguments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274975 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp b/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp index 4060f01582..fc2ab1d6e3 100644 --- a/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp +++ b/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); } }