diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2016-07-09 12:16:58 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2016-07-09 12:16:58 +0000 |
commit | 6ec90ec2ab69bff816bff52ec02151fe82be8147 (patch) | |
tree | aebec4dba28f257166318b850232f53f3d0b6548 /clang/lib/StaticAnalyzer | |
parent | 951a6287c7ec5f8b1ab6391adee55770f9d9cf67 (diff) | |
download | bcm5719-llvm-6ec90ec2ab69bff816bff52ec02151fe82be8147.tar.gz bcm5719-llvm-6ec90ec2ab69bff816bff52ec02151fe82be8147.zip |
[analyzer] Older version of GCC 4.7 crash on lambdas in default arguments.
llvm-svn: 274975
Diffstat (limited to 'clang/lib/StaticAnalyzer')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
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 <typename T1> void Erase(const T1 *DR, - llvm::function_ref<bool(const MallocOverflowCheck &)> Pred = - [](const MallocOverflowCheck &) { return true; }) { - auto P = [this, DR, Pred](const MallocOverflowCheck &Check) { + llvm::function_ref<bool(const MallocOverflowCheck &)> Pred) { + auto P = [DR, Pred](const MallocOverflowCheck &Check) { if (const auto *CheckDR = dyn_cast<T1>(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<DeclRefExpr>(E)) - Erase<DeclRefExpr>(DR); + Erase<DeclRefExpr>(DR, PredTrue); else if (const auto *ME = dyn_cast<MemberExpr>(E)) { - Erase<MemberExpr>(ME); + Erase<MemberExpr>(ME, PredTrue); } } |