diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index de73ada1fa2..8646f697ac1 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -10553,4 +10553,18 @@ public class AST2CPPTests extends AST2TestBase { assertEquals(',', argumentTokens[1].getTokenCharImage()[0]); assertEquals('2', argumentTokens[2].getTokenCharImage()[0]); } + + // struct MyStruct { + // struct Inner { + // int waldo; + // } Inner; + // }; + // + // void foo() { + // struct MyStruct::Inner in; + // in.waldo; + // } + public void testFieldAndNestedTypeWithSameName_425033() throws Exception { + parseAndCheckBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java index a33756d8b07..c8e013ae562 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java @@ -149,11 +149,7 @@ public class LookupData extends ScopeLookupData { IASTNode parent = tn.getParent(); IASTNode nameParent= parent; - if (parent instanceof ICPPASTBaseSpecifier - || parent instanceof ICPPASTElaboratedTypeSpecifier - || parent instanceof ICPPASTCompositeTypeSpecifier) { - typesOnly= true; - } else if (parent instanceof ICPPASTQualifiedName) { + if (parent instanceof ICPPASTQualifiedName) { final ICPPASTQualifiedName qn = (ICPPASTQualifiedName) parent; if (qn.getLastName() != tn) { // For resolving template id ambiguities we need to consider non-types. @@ -173,7 +169,11 @@ public class LookupData extends ScopeLookupData { } } - if (nameParent instanceof ICPPASTUsingDeclaration) { + if (nameParent instanceof ICPPASTBaseSpecifier + || nameParent instanceof ICPPASTElaboratedTypeSpecifier + || nameParent instanceof ICPPASTCompositeTypeSpecifier) { + typesOnly= true; + } else if (nameParent instanceof ICPPASTUsingDeclaration) { forUsingDeclaration= true; } else if (nameParent instanceof IASTDeclarator) { fDeclarator= (IASTDeclarator) nameParent;