From efc80fde570d9c0917164add84db5d6c6b8bf0a2 Mon Sep 17 00:00:00 2001 From: Malte Langkabel Date: Wed, 18 Nov 2020 19:25:12 +0100 Subject: [PATCH] logic: check if clang NamedDecl really has a name before asking for it to prevent assert (issue #1075) (#1112) --- .../cxx/CxxAstVisitorComponentIndexer.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp index e89a5d48..12ce5312 100644 --- a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp +++ b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp @@ -320,7 +320,9 @@ void CxxAstVisitorComponentIndexer::visitFieldDecl(clang::FieldDecl* d) { for (clang::FieldDecl* templateFieldDecl: declaringRecordTemplateDecl->fields()) { - if (d->getName() == templateFieldDecl->getName()) + if (d->getDeclName().isIdentifier() && + templateFieldDecl->getDeclName().isIdentifier() && + d->getName() == templateFieldDecl->getName()) { Id templateFieldId = getOrCreateSymbolId(templateFieldDecl); m_client->recordSymbolKind(templateFieldId, SYMBOL_FIELD); @@ -377,9 +379,12 @@ void CxxAstVisitorComponentIndexer::visitFunctionDecl(clang::FunctionDecl* d) clang::dyn_cast_or_null( templateMethodDecl)) { - if (d->getName() == functionTemplateDecl->getName()) + if (d->getDeclName().isIdentifier() && + functionTemplateDecl->getDeclName().isIdentifier() && + d->getName() == functionTemplateDecl->getName()) { - Id templateMethodId = getOrCreateSymbolId(functionTemplateDecl); + const Id templateMethodId = getOrCreateSymbolId( + functionTemplateDecl); m_client->recordSymbolKind(templateMethodId, SYMBOL_METHOD); m_client->recordReference( REFERENCE_TEMPLATE_SPECIALIZATION, @@ -567,7 +572,7 @@ void CxxAstVisitorComponentIndexer::visitUsingDecl(clang::UsingDecl* d) void CxxAstVisitorComponentIndexer::visitNonTypeTemplateParmDecl(clang::NonTypeTemplateParmDecl* d) { - if (getAstVisitor()->shouldVisitDecl(d) && + if (getAstVisitor()->shouldVisitDecl(d) && d->getDeclName().isIdentifier() && !d->getName().empty()) // We don't create symbols for unnamed template parameters. { m_client->recordLocalSymbol( @@ -577,7 +582,7 @@ void CxxAstVisitorComponentIndexer::visitNonTypeTemplateParmDecl(clang::NonTypeT void CxxAstVisitorComponentIndexer::visitTemplateTypeParmDecl(clang::TemplateTypeParmDecl* d) { - if (getAstVisitor()->shouldVisitDecl(d) && + if (getAstVisitor()->shouldVisitDecl(d) && d->getDeclName().isIdentifier() && !d->getName().empty()) // We don't create symbols for unnamed template parameters. { m_client->recordLocalSymbol( @@ -587,7 +592,7 @@ void CxxAstVisitorComponentIndexer::visitTemplateTypeParmDecl(clang::TemplateTyp void CxxAstVisitorComponentIndexer::visitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl* d) { - if (getAstVisitor()->shouldVisitDecl(d) && + if (getAstVisitor()->shouldVisitDecl(d) && d->getDeclName().isIdentifier() && !d->getName().empty()) // We don't create symbols for unnamed template parameters. { m_client->recordLocalSymbol(