From f3767148c0c3464d8d92f70fa80b203a8b01a428 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Mon, 6 Apr 2009 16:48:43 +0200
Subject: [PATCH] Fixed: Possible crash when resolving fully qualified name
 ids.

Task: 249227
---
 src/libs/cplusplus/LookupContext.cpp | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 64f6bc1e012..f5a0edd66bc 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -223,14 +223,13 @@ QList<Symbol *> LookupContext::resolve(Name *name, const QList<Scope *> &visible
                         continue;
 
                     if (q->nameCount() > 1) {
-                        Name *classOrNamespaceName = 0;
-
-                        if (q->nameCount() == 1)
-                            classOrNamespaceName = q->nameAt(0);
-                        else
-                            classOrNamespaceName = control()->qualifiedNameId(q->names(),
-                                                                              q->nameCount() - 1);
+                        Name *classOrNamespaceName = control()->qualifiedNameId(q->names(),
+                                                                                q->nameCount() - 1);
 
+                        if (Identifier *classOrNamespaceNameId = identifier(classOrNamespaceName)) {
+                            if (classOrNamespaceNameId->isEqualTo(id))
+                                continue;
+                        }
 
                         const QList<Symbol *> resolvedClassOrNamespace =
                                 resolveClassOrNamespace(classOrNamespaceName, visibleScopes);
@@ -455,7 +454,7 @@ void LookupContext::expandFunction(Scope *scope,
         expandedScopes->append(function->arguments());
     if (QualifiedNameId *q = function->name()->asQualifiedNameId()) {
         Name *nestedNameSpec = 0;
-        if (q->nameCount() == 1 && q->isGlobal())
+        if (q->nameCount() == 1)
             nestedNameSpec = q->nameAt(0);
         else
             nestedNameSpec = control()->qualifiedNameId(q->names(), q->nameCount() - 1,
-- 
GitLab