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 6f11824f4ba..a9313365212 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 @@ -11751,4 +11751,17 @@ public class AST2CPPTests extends AST2TestBase { assertEquals(1, implicitNames.length); assertEquals(ctor, implicitNames[0].resolveBinding()); } + + // template + // struct Waldo { + // T x; + // }; + // + // void test() { + // using Waldo = Waldo; + // auto size = sizeof(Waldo::x); + // } + public void testShadowingAliasDeclaration_484200() throws Exception { + parseAndCheckBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java index 55fe5f93a8c..5a14ad8c180 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java @@ -1967,6 +1967,11 @@ public class CPPSemantics { } else if (prop == ICPPASTNamespaceAlias.ALIAS_NAME) { nd = (ASTNode) nd.getParent(); pointOfDecl = nd.getOffset() + nd.getLength(); + } else if (prop == ICPPASTAliasDeclaration.ALIAS_NAME) { + // [basic.scope.pdecl]/p3: The point of declaration of an alias or alias template + // immediately follows the type-id to which the alias refers. + ASTNode targetType = (ASTNode) ((ICPPASTAliasDeclaration) nd.getParent()).getMappingTypeId(); + pointOfDecl = targetType.getOffset() + targetType.getLength(); } else if (prop == ICPPASTSimpleTypeTemplateParameter.PARAMETER_NAME || prop == ICPPASTTemplatedTypeTemplateParameter.PARAMETER_NAME) { // [basic.scope.pdecl]/p9: The point of declaration for a template parameter