[analyzer] Fix an assertion fail in VirtualCallChecker

Differential Revision: https://reviews.llvm.org/D37978

llvm-svn: 313866
This commit is contained in:
Gabor Horvath 2017-09-21 08:18:59 +00:00
parent 1390af2dd2
commit 5536a01ad2
2 changed files with 22 additions and 1 deletions

View File

@ -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;

View File

@ -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(); }
}