C++: Fix crash when typing illegal class names

Such as class ~A {} or class operator+ {}.

Done by Roberto Raggi

Change-Id: I4fdad6d27aaa997e651f2d08de36fe675fc78814
Reviewed-on: http://codereview.qt.nokia.com/2778
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
This commit is contained in:
Leandro Melo
2011-08-09 13:46:28 +02:00
committed by Leandro T. C. Melo
parent a9c0d4453e
commit fb550c4ff1

View File

@@ -2771,6 +2771,21 @@ bool Bind::visit(ClassSpecifierAST *ast)
startScopeOffset = tokenAt(q->unqualified_name->lastToken() - 1).end(); // at the end of the unqualified name
}
}
// get the unqualified class name
const QualifiedNameId *q = className->asQualifiedNameId();
const Name *unqualifiedClassName = q ? q->name() : className;
if (! unqualifiedClassName) // paranoia check
className = 0;
else if (! (unqualifiedClassName->isNameId() || unqualifiedClassName->isTemplateNameId())) {
translationUnit()->error(sourceLocation, "expected a class-name");
className = unqualifiedClassName->identifier();
if (q && className)
className = control()->qualifiedNameId(q->base(), className);
}
}
Class *klass = control()->newClass(sourceLocation, className);