diff options
author | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2013-05-17 15:16:45 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2013-05-24 09:38:57 +0200 |
commit | b4c3cef863935ae94ada04a162212d40db17ec6a (patch) | |
tree | 33f1ba245aacb0040592616cb069794b73e66476 /src/libs/cplusplus/LookupContext.cpp | |
parent | 7fbcf01e40baa186982c3a717a086c9327390d3a (diff) | |
download | qt-creator-b4c3cef863935ae94ada04a162212d40db17ec6a.tar.gz |
C++: Fix crash for nameless using declaration
Task-number: QTCREATORBUG-9323
Change-Id: I52dfe8c03da14fc08723c3878fec0f6e9150152c
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/libs/cplusplus/LookupContext.cpp')
-rw-r--r-- | src/libs/cplusplus/LookupContext.cpp | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 6b718cfbc3..086c4dc7c8 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -249,17 +249,19 @@ QList<LookupItem> LookupContext::lookupByUsing(const Name *name, Scope *scope) c if (name->isNameId()) { for (unsigned i = 0, count = scope->memberCount(); i < count; ++i) { if (UsingDeclaration *u = scope->memberAt(i)->asUsingDeclaration()) { - if (const QualifiedNameId *q = u->name()->asQualifiedNameId()) { - if (q->name()->isEqualTo(name)) { - candidates = bindings()->globalNamespace()->find(q); - - // if it is not a global scope(scope of scope is not equal 0) - // then add current using declaration as a candidate - if (scope->scope()) { - LookupItem item; - item.setDeclaration(u); - item.setScope(scope); - candidates.append(item); + if (const Name *usingDeclarationName = u->name()) { + if (const QualifiedNameId *q = usingDeclarationName->asQualifiedNameId()) { + if (q->name() && q->name()->isEqualTo(name)) { + candidates = bindings()->globalNamespace()->find(q); + + // if it is not a global scope(scope of scope is not equal 0) + // then add current using declaration as a candidate + if (scope->scope()) { + LookupItem item; + item.setDeclaration(u); + item.setScope(scope); + candidates.append(item); + } } } } @@ -328,9 +330,11 @@ ClassOrNamespace *LookupContext::lookupType(const Name *name, Scope *scope, } } else if (UsingDeclaration *ud = m->asUsingDeclaration()) { if (name->isNameId()) { - if (const QualifiedNameId *q = ud->name()->asQualifiedNameId()) { - if (q->name()->isEqualTo(name)) { - return bindings()->globalNamespace()->lookupType(q); + if (const Name *usingDeclarationName = ud->name()) { + if (const QualifiedNameId *q = usingDeclarationName->asQualifiedNameId()) { + if (q->name() && q->name()->isEqualTo(name)) { + return bindings()->globalNamespace()->lookupType(q); + } } } |