From f7a8c5f05d3c46d3d1f68341b211d74d888634ad Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Fri, 16 Jul 2010 15:23:26 +0200
Subject: [PATCH] Fixed lookup to skip over friend declarations.

---
 src/libs/cplusplus/LookupContext.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 5c935eb6a11..dc8d3c06d59 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -449,6 +449,9 @@ void ClassOrNamespace::lookup_helper(const Name *name, ClassOrNamespace *binding
         const Identifier *nameId = name->identifier();
 
         foreach (Symbol *s, binding->symbols()) {
+            if (s->isFriend())
+                continue;
+
             if (ScopedSymbol *scoped = s->asScopedSymbol()) {
                 if (Class *klass = scoped->asClass()) {
                     if (const Identifier *id = klass->identifier()) {
@@ -486,6 +489,8 @@ void CreateBindings::lookupInScope(const Name *name, Scope *scope,
         for (Symbol *s = scope->lookat(op->kind()); s; s = s->next()) {
             if (! s->name())
                 continue;
+            else if (s->isFriend())
+                continue;
             else if (! s->name()->isEqualTo(op))
                 continue;
 
@@ -497,7 +502,9 @@ void CreateBindings::lookupInScope(const Name *name, Scope *scope,
 
     } else if (const Identifier *id = name->identifier()) {
         for (Symbol *s = scope->lookat(id); s; s = s->next()) {
-            if (! id->isEqualTo(s->identifier()))
+            if (s->isFriend())
+                continue; // skip friends
+            else if (! id->isEqualTo(s->identifier()))
                 continue;
             else if (s->name()->isQualifiedNameId())
                 continue; // skip qualified ids.
-- 
GitLab