C++: Fix potential crash

If no template is found, findSpecialization will crash

Task-number: QTCREATORBUG-14748
Change-Id: I94b970e6eb994f0a8d85a4b996e52fcff0affef3
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Orgad Shaneh
2015-08-02 19:14:25 +03:00
committed by Orgad Shaneh
parent 99dea548e0
commit 1b90b80f85

View File

@@ -41,6 +41,7 @@
#include <cplusplus/Names.h>
#include <cplusplus/Scope.h>
#include <cplusplus/Control.h>
#include <cplusplus/cppassert.h>
#include <QStack>
#include <QHash>
@@ -1255,12 +1256,14 @@ LookupScopePrivate *LookupScopePrivate::nestedType(const Name *name, LookupScope
if (baseTemplate)
break;
}
if (LookupScopePrivate *specialization =
findSpecialization(baseTemplate, templId, specializations, origin)) {
reference = specialization;
if (Q_UNLIKELY(debug)) {
Overview oo;
qDebug() << "picked specialization" << oo(specialization->_name);
if (baseTemplate) {
if (LookupScopePrivate *specialization =
findSpecialization(baseTemplate, templId, specializations, origin)) {
reference = specialization;
if (Q_UNLIKELY(debug)) {
Overview oo;
qDebug() << "picked specialization" << oo(specialization->_name);
}
}
}
}
@@ -1970,6 +1973,7 @@ FullySpecifiedType CreateBindings::resolveTemplateArgument(Clone &cloner,
unsigned index)
{
FullySpecifiedType ty;
CPP_ASSERT(specialization && instantiation, return ty);
const TypenameArgument *tParam = 0;
if (Symbol *tArgument = specialization->templateParameterAt(index))