From 4da9c53931bd80f93a07658ba80e29ce847cf949 Mon Sep 17 00:00:00 2001 From: "Timothee \"TTimo\" Besset" Date: Wed, 12 Feb 2020 01:20:20 -0600 Subject: [PATCH] logic: Fix an indexer crash (#911) --- .../cxx/CxxAstVisitorComponentIndexer.cpp | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp index d9b58347..65a3a3db 100644 --- a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp +++ b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp @@ -804,18 +804,25 @@ void CxxAstVisitorComponentIndexer::visitCXXDeleteExpr(clang::CXXDeleteExpr* s) { if (!s->isArrayForm() && getAstVisitor()->shouldVisitReference(s->getBeginLoc())) { - if (clang::CXXRecordDecl* recordDecl = s->getDestroyedType()->getAsCXXRecordDecl()) + clang::QualType destroyedTypeQual = s->getDestroyedType(); + const clang::Type* destroyedType = destroyedTypeQual.getTypePtrOrNull(); + if (destroyedType != nullptr) { - if (clang::CXXDestructorDecl* destructorDecl = recordDecl->getDestructor()) + clang::CXXRecordDecl* recordDecl = destroyedType->getAsCXXRecordDecl(); + if (recordDecl != nullptr) { - const Id symbolId = getOrCreateSymbolId(destructorDecl); + clang::CXXDestructorDecl* destructorDecl = recordDecl->getDestructor(); + if (destructorDecl != nullptr) + { + const Id symbolId = getOrCreateSymbolId(destructorDecl); - m_client->recordReference( - REFERENCE_CALL, - symbolId, - getOrCreateSymbolId( - getAstVisitor()->getComponent()->getContext()), - getParseLocation(s->getBeginLoc())); + m_client->recordReference( + REFERENCE_CALL, + symbolId, + getOrCreateSymbolId( + getAstVisitor()->getComponent()->getContext()), + getParseLocation(s->getBeginLoc())); + } } } }