diff --git a/src/libs/cplusplus/CppBindings.cpp b/src/libs/cplusplus/CppBindings.cpp
index 1eb11b312733247ab07a6c09027108284c41b97f..acbeb6f6fd114a5a2a965d4cbc4c9d4945fe3ca6 100644
--- a/src/libs/cplusplus/CppBindings.cpp
+++ b/src/libs/cplusplus/CppBindings.cpp
@@ -404,6 +404,11 @@ Binding *ClassBinding::findClassOrNamespaceBinding(Identifier *id, QSet<Binding
     if (id->isEqualTo(identifier()))
         return this;
 
+    if (processed->contains(this))
+        return 0;
+
+    processed->insert(this);
+
     foreach (ClassBinding *nestedClassBinding, children) {
         if (id->isEqualTo(nestedClassBinding->identifier()))
             return nestedClassBinding;
@@ -412,6 +417,7 @@ Binding *ClassBinding::findClassOrNamespaceBinding(Identifier *id, QSet<Binding
     foreach (ClassBinding *baseClassBinding, baseClassBindings) {
         if (! baseClassBinding)
             continue;
+
         else if (Binding *b = baseClassBinding->findClassOrNamespaceBinding(id, processed))
             return b;
     }