diff options
author | Sam McCall <sam.mccall@gmail.com> | 2017-01-31 05:23:20 +0000 |
---|---|---|
committer | Sam McCall <sam.mccall@gmail.com> | 2017-01-31 05:23:20 +0000 |
commit | 93590e09d517f3574a0a9130d1b56440b928933a (patch) | |
tree | e4aa3355f6b7db0d1b440966c159136556de502a /clang/test/Analysis/virtualcall.cpp | |
parent | 06e038c6de0051b4028cf3c5ccf6656019e7e52f (diff) | |
download | bcm5719-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.cpp | 11 |
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" |