[llvm-branch-commits] [cfe-branch] r296154 - Merging r293604:

Hans Wennborg via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Feb 24 10:49:54 PST 2017


Author: hans
Date: Fri Feb 24 12:49:54 2017
New Revision: 296154

URL: http://llvm.org/viewvc/llvm-project?rev=296154&view=rev
Log:
Merging r293604:
------------------------------------------------------------------------
r293604 | sammccall | 2017-01-30 21:23:20 -0800 (Mon, 30 Jan 2017) | 12 lines

In VirtualCallChecker, handle indirect calls

Summary:
In VirtualCallChecker, handle indirect calls.

getDirectCallee() can be nullptr, and dyn_cast(nullptr) is UB

Reviewers: bkramer

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D29303
------------------------------------------------------------------------

Modified:
    cfe/branches/release_40/   (props changed)
    cfe/branches/release_40/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp
    cfe/branches/release_40/test/Analysis/virtualcall.cpp

Propchange: cfe/branches/release_40/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Feb 24 12:49:54 2017
@@ -1,4 +1,4 @@
 /cfe/branches/type-system-rewrite:134693-134817
-/cfe/trunk:291850,291853,291865,291871,291877,291879,291881,291907,291955,291963-291964,292032,292052,292183,292194,292247,292265,292497,292555,292558-292559,292561,292590,292800,292847,292874,292991,293043,293134,293360,293369,293596,293678,293787,294008,294800,294855,294954,295149-295150,295224,295313,295473-295474,295592,295610,295843,296063
+/cfe/trunk:291850,291853,291865,291871,291877,291879,291881,291907,291955,291963-291964,292032,292052,292183,292194,292247,292265,292497,292555,292558-292559,292561,292590,292800,292847,292874,292991,293043,293134,293360,293369,293596,293604,293678,293787,294008,294800,294855,294954,295149-295150,295224,295313,295473-295474,295592,295610,295843,296063
 /cfe/trunk/test:170344
 /cfe/trunk/test/SemaTemplate:126920

Modified: cfe/branches/release_40/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_40/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp?rev=296154&r1=296153&r2=296154&view=diff
==============================================================================
--- cfe/branches/release_40/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp (original)
+++ cfe/branches/release_40/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp Fri Feb 24 12:49:54 2017
@@ -179,7 +179,8 @@ void WalkAST::VisitCXXMemberCallExpr(Cal
   }
 
   // Get the callee.
-  const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(CE->getDirectCallee());
+  const CXXMethodDecl *MD =
+      dyn_cast_or_null<CXXMethodDecl>(CE->getDirectCallee());
   if (MD && MD->isVirtual() && !callIsNonVirtual && !MD->hasAttr<FinalAttr>() &&
       !MD->getParent()->hasAttr<FinalAttr>())
     ReportVirtualCall(CE, MD->isPure());

Modified: cfe/branches/release_40/test/Analysis/virtualcall.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_40/test/Analysis/virtualcall.cpp?rev=296154&r1=296153&r2=296154&view=diff
==============================================================================
--- cfe/branches/release_40/test/Analysis/virtualcall.cpp (original)
+++ cfe/branches/release_40/test/Analysis/virtualcall.cpp Fri Feb 24 12:49:54 2017
@@ -115,12 +115,23 @@ public:
   int foo() override;
 };
 
+// Regression test: don't crash when there's no direct callee.
+class F {
+public:
+  F() {
+    void (F::* ptr)() = &F::foo;
+    (this->*ptr)();
+  }
+  void foo();
+};
+
 int main() {
   A *a;
   B *b;
   C *c;
   D *d;
   E *e;
+  F *f;
 }
 
 #include "virtualcall.h"




More information about the llvm-branch-commits mailing list