forked from qt-creator/qt-creator
C++: Check for Function::name() before using it
Lambdas do not have a name. Change-Id: Ifda4816c62dcfe19bdbb1649dc1caf408e056b37 Task-number: QTCREATORBUG-12686 Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
@@ -721,7 +721,7 @@ void CreateBindings::lookupInScope(const Name *name, Scope *scope,
|
|||||||
continue; // skip using namespace directives
|
continue; // skip using namespace directives
|
||||||
else if (! id->match(s->identifier()))
|
else if (! id->match(s->identifier()))
|
||||||
continue;
|
continue;
|
||||||
else if (s->name()->isQualifiedNameId())
|
else if (s->name() && s->name()->isQualifiedNameId())
|
||||||
continue; // skip qualified ids.
|
continue; // skip qualified ids.
|
||||||
|
|
||||||
if (Q_UNLIKELY(debug)) {
|
if (Q_UNLIKELY(debug)) {
|
||||||
|
@@ -350,7 +350,8 @@ void ResolveExpression::thisObject()
|
|||||||
FullySpecifiedType ptrTy(control()->pointerType(classTy));
|
FullySpecifiedType ptrTy(control()->pointerType(classTy));
|
||||||
addResult(ptrTy, fun->enclosingScope());
|
addResult(ptrTy, fun->enclosingScope());
|
||||||
break;
|
break;
|
||||||
} else if (const QualifiedNameId *q = fun->name()->asQualifiedNameId()) {
|
} else if (const Name *name = fun->name()) {
|
||||||
|
if (const QualifiedNameId *q = name->asQualifiedNameId()) {
|
||||||
if (q->base()) {
|
if (q->base()) {
|
||||||
FullySpecifiedType classTy(control()->namedType(q->base()));
|
FullySpecifiedType classTy(control()->namedType(q->base()));
|
||||||
FullySpecifiedType ptrTy(control()->pointerType(classTy));
|
FullySpecifiedType ptrTy(control()->pointerType(classTy));
|
||||||
@@ -361,6 +362,7 @@ void ResolveExpression::thisObject()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool ResolveExpression::visit(CompoundExpressionAST *ast)
|
bool ResolveExpression::visit(CompoundExpressionAST *ast)
|
||||||
{
|
{
|
||||||
|
@@ -193,7 +193,7 @@ Class *isMemberFunction(const LookupContext &context, Function *function)
|
|||||||
|
|
||||||
const Name *functionName = function->name();
|
const Name *functionName = function->name();
|
||||||
if (!functionName)
|
if (!functionName)
|
||||||
return 0; // anonymous function names are not valid c++
|
return 0;
|
||||||
|
|
||||||
if (!functionName->isQualifiedNameId())
|
if (!functionName->isQualifiedNameId())
|
||||||
return 0; // trying to add a declaration for a global function
|
return 0; // trying to add a declaration for a global function
|
||||||
@@ -225,7 +225,7 @@ Namespace *isNamespaceFunction(const LookupContext &context, Function *function)
|
|||||||
|
|
||||||
const Name *functionName = function->name();
|
const Name *functionName = function->name();
|
||||||
if (!functionName)
|
if (!functionName)
|
||||||
return 0; // anonymous function names are not valid c++
|
return 0;
|
||||||
|
|
||||||
// global namespace
|
// global namespace
|
||||||
if (!functionName->isQualifiedNameId()) {
|
if (!functionName->isQualifiedNameId()) {
|
||||||
@@ -4148,7 +4148,7 @@ QString definitionSignature(const CppQuickFixAssistInterface *assist,
|
|||||||
oo.showReturnTypes = true;
|
oo.showReturnTypes = true;
|
||||||
oo.showArgumentNames = true;
|
oo.showArgumentNames = true;
|
||||||
const Name *name = func->name();
|
const Name *name = func->name();
|
||||||
if (nameIncludesOperatorName(name)) {
|
if (name && nameIncludesOperatorName(name)) {
|
||||||
CoreDeclaratorAST *coreDeclarator = functionDefinitionAST->declarator->core_declarator;
|
CoreDeclaratorAST *coreDeclarator = functionDefinitionAST->declarator->core_declarator;
|
||||||
const QString operatorNameText = baseFile->textOf(coreDeclarator);
|
const QString operatorNameText = baseFile->textOf(coreDeclarator);
|
||||||
oo.includeWhiteSpaceInOperatorName = operatorNameText.contains(QLatin1Char(' '));
|
oo.includeWhiteSpaceInOperatorName = operatorNameText.contains(QLatin1Char(' '));
|
||||||
|
@@ -278,7 +278,7 @@ void SymbolFinder::findMatchingDeclaration(const LookupContext &context,
|
|||||||
|
|
||||||
const Name *functionName = functionType->name();
|
const Name *functionName = functionType->name();
|
||||||
if (!functionName)
|
if (!functionName)
|
||||||
return; // anonymous function names are not valid c++
|
return;
|
||||||
|
|
||||||
ClassOrNamespace *binding = 0;
|
ClassOrNamespace *binding = 0;
|
||||||
const QualifiedNameId *qName = functionName->asQualifiedNameId();
|
const QualifiedNameId *qName = functionName->asQualifiedNameId();
|
||||||
|
@@ -1122,7 +1122,8 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
|
|||||||
TranslationUnitAST *xUnit = AST_cpp_document->translationUnit()->ast()->asTranslationUnit();
|
TranslationUnitAST *xUnit = AST_cpp_document->translationUnit()->ast()->asTranslationUnit();
|
||||||
for (DeclarationListAST *iter = xUnit->declaration_list; iter; iter = iter->next) {
|
for (DeclarationListAST *iter = xUnit->declaration_list; iter; iter = iter->next) {
|
||||||
if (FunctionDefinitionAST *funDef = iter->value->asFunctionDefinition()) {
|
if (FunctionDefinitionAST *funDef = iter->value->asFunctionDefinition()) {
|
||||||
if (const QualifiedNameId *qName = funDef->symbol->name()->asQualifiedNameId()) {
|
if (const Name *name = funDef->symbol->name()) {
|
||||||
|
if (const QualifiedNameId *qName = name->asQualifiedNameId()) {
|
||||||
const QString className = oo(qName->base());
|
const QString className = oo(qName->base());
|
||||||
const QString methodName = oo(qName->name());
|
const QString methodName = oo(qName->name());
|
||||||
|
|
||||||
@@ -1173,6 +1174,8 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
|
|||||||
todo.append(info);
|
todo.append(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user