diff --git a/src/shared/cplusplus/CheckName.cpp b/src/shared/cplusplus/CheckName.cpp index 6476b3295f16cee1c56c984c0425a7d026248084..63a1885128a7668905845c4a9ee86da3d8b5cffa 100644 --- a/src/shared/cplusplus/CheckName.cpp +++ b/src/shared/cplusplus/CheckName.cpp @@ -378,12 +378,14 @@ bool CheckName::visit(TemplateIdAST *ast) bool CheckName::visit(ObjCSelectorWithoutArgumentsAST *ast) { - std::vector<Name *> names; - Identifier *id = control()->findOrInsertIdentifier(spell(ast->name_token)); - NameId *nameId = control()->nameId(id); - names.push_back(nameId); - _name = control()->selectorNameId(&names[0], names.size(), false); - ast->selector_name = _name; + if (ast->name_token) { + std::vector<Name *> names; + Identifier *id = control()->findOrInsertIdentifier(spell(ast->name_token)); + NameId *nameId = control()->nameId(id); + names.push_back(nameId); + _name = control()->selectorNameId(&names[0], names.size(), false); + ast->selector_name = _name; + } return false; } @@ -392,9 +394,14 @@ bool CheckName::visit(ObjCSelectorWithArgumentsAST *ast) { std::vector<Name *> names; for (ObjCSelectorArgumentListAST *it = ast->selector_argument_list; it; it = it->next) { - Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token)); - NameId *nameId = control()->nameId(id); - names.push_back(nameId); + if (it->value->name_token) { + Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token)); + NameId *nameId = control()->nameId(id); + names.push_back(nameId); + } else { + // we have an incomplete name due, probably due to error recovery. So, back out completely + return false; + } } if (!names.empty()) {