diff options
author | Gabor Horvath <xazax.hun@gmail.com> | 2017-09-21 08:18:59 +0000 |
---|---|---|
committer | Gabor Horvath <xazax.hun@gmail.com> | 2017-09-21 08:18:59 +0000 |
commit | 5536a01ad24973c93fd39f227e814f98f8bf86d7 (patch) | |
tree | 1f4cb0fea2a035fc88b82e2679aa8a828e156110 | |
parent | 1390af2dd2a0950cb0a7374602985a4d0792a63b (diff) | |
download | bcm5719-llvm-5536a01ad24973c93fd39f227e814f98f8bf86d7.tar.gz bcm5719-llvm-5536a01ad24973c93fd39f227e814f98f8bf86d7.zip |
[analyzer] Fix an assertion fail in VirtualCallChecker
Differential Revision: https://reviews.llvm.org/D37978
llvm-svn: 313866
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp | 2 | ||||
-rw-r--r-- | clang/test/Analysis/virtualcall.cpp | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp index ea1976e0202..c5010f53785 100644 --- a/clang/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/VirtualCallChecker.cpp @@ -146,7 +146,7 @@ static bool isVirtualCall(const CallExpr *CE) { if (CME->getQualifier()) CallIsNonVirtual = true; - if (const Expr *Base = CME->getBase()->IgnoreImpCasts()) { + if (const Expr *Base = CME->getBase()) { // The most derived class is marked final. if (Base->getBestDynamicClassType()->hasAttr<FinalAttr>()) CallIsNonVirtual = true; diff --git a/clang/test/Analysis/virtualcall.cpp b/clang/test/Analysis/virtualcall.cpp index 135fa585ece..c22a8463c04 100644 --- a/clang/test/Analysis/virtualcall.cpp +++ b/clang/test/Analysis/virtualcall.cpp @@ -271,3 +271,24 @@ int main() { #if !PUREONLY //expected-note-re@-2 2{{{{^}}Calling '~E'}} #endif + +namespace PR34451 { +struct a { + void b() { + a c[1]; + c->b(); + } +}; + +class e { + public: + void b() const; +}; + +class c { + void m_fn2() const; + e d[]; +}; + +void c::m_fn2() const { d->b(); } +} |