r274975 - [analyzer] Older version of GCC 4.7 crash on lambdas in default arguments.

Benjamin Kramer via cfe-commits cfe-commits at lists.llvm.org
Sat Jul 9 05:16:58 PDT 2016


Author: d0k
Date: Sat Jul  9 07:16:58 2016
New Revision: 274975

URL: http://llvm.org/viewvc/llvm-project?rev=274975&view=rev
Log:
[analyzer] Older version of GCC 4.7 crash on lambdas in default arguments.

Modified:
    cfe/trunk/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp

Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp?rev=274975&r1=274974&r2=274975&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/MallocOverflowSecurityChecker.cpp Sat Jul  9 07:16:58 2016
@@ -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);
       }
     }
 




More information about the cfe-commits mailing list