diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index 41d6d8618a3..387d1ec3e72 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -1222,16 +1222,19 @@ LookupScopePrivate *LookupScopePrivate::findNestedType(const Name *name, LookupS Declaration *decl = typedefit->second; if (_alreadyConsideredTypedefs.contains(decl)) return 0; + LookupScopePrivate *binding = 0; _alreadyConsideredTypedefs.insert(decl); if (const NamedType *namedTy = decl->type()->asNamedType()) { - if (LookupScope *e = q->lookupType(namedTy->name())) - return e->d; - if (origin) { + if (LookupScope *e = q->lookupType(namedTy->name())) { + binding = e->d; + } else if (origin) { if (LookupScope *e = origin->q->lookupType(namedTy->name())) - return e->d; + binding = e->d; } } _alreadyConsideredTypedefs.remove(decl); + if (binding) + return binding; } auto it = _nestedScopes.find(name); diff --git a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp index 98dc98504fc..eb88edfb9fc 100644 --- a/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp +++ b/tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp @@ -1202,7 +1202,6 @@ void tst_CheckSymbols::findField() source[position] = ' '; BaseTestCase tc(source); Use use = tc.findUse(line, column); - QEXPECT_FAIL("pointer_indirect_specialization_typedef", "QTCREATORBUG-14141", Abort); QEXPECT_FAIL("pointer_indirect_specialization_double_indirection", "QTCREATORBUG-14141", Abort); QEXPECT_FAIL("pointer_indirect_specialization_double_indirection_with_base", "QTCREATORBUG-14141", Abort); QEXPECT_FAIL("recursive_instantiation_of_template_type", "QTCREATORBUG-14237", Abort);