summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/virtualcall.cpp
diff options
context:
space:
mode:
authorSam McCall <sam.mccall@gmail.com>2017-01-31 05:23:20 +0000
committerSam McCall <sam.mccall@gmail.com>2017-01-31 05:23:20 +0000
commit93590e09d517f3574a0a9130d1b56440b928933a (patch)
treee4aa3355f6b7db0d1b440966c159136556de502a /clang/test/Analysis/virtualcall.cpp
parent06e038c6de0051b4028cf3c5ccf6656019e7e52f (diff)
downloadbcm5719-llvm-93590e09d517f3574a0a9130d1b56440b928933a.tar.gz
bcm5719-llvm-93590e09d517f3574a0a9130d1b56440b928933a.zip
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 llvm-svn: 293604
Diffstat (limited to 'clang/test/Analysis/virtualcall.cpp')
-rw-r--r--clang/test/Analysis/virtualcall.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/test/Analysis/virtualcall.cpp b/clang/test/Analysis/virtualcall.cpp
index e42b898a073..311f0a137c6 100644
--- a/clang/test/Analysis/virtualcall.cpp
+++ b/clang/test/Analysis/virtualcall.cpp
@@ -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"
OpenPOWER on IntegriCloud