From 01fcf452a79ae3bbd9253059e868d3d05f1e6c55 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sat, 23 Aug 2014 01:29:28 -0400 Subject: [PATCH] Bug 442213 - Field reference in pack expansion Change-Id: Iea4f20ced1050d66aad178d43db0c5dac15faed2 Signed-off-by: Nathan Ridge Reviewed-on: https://git.eclipse.org/r/32191 Reviewed-by: Sergey Prigogin Tested-by: Sergey Prigogin --- .../parser/tests/ast2/AST2TemplateTests.java | 16 ++++++++++++++++ .../dom/parser/cpp/semantics/CPPVisitor.java | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index 31e3a6fa056..3800641a7ba 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -8057,6 +8057,22 @@ public class AST2TemplateTests extends AST2TestBase { BindingAssertionHelper helper = getAssertionHelper(); helper.assertProblem("waldo()", "waldo"); } + + // // Example 1 + // template + // void foo1(T... t) { + // bar(t.waldo...); + // } + // + // // Example 2 + // template struct A {}; + // template + // void foo2(A... t) { + // bar(t.waldo...); + // } + public void testMemberAccessInPackExpansion_442213() throws Exception { + parseAndCheckBindings(); + } // template // struct A {}; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index 1016dedc967..d538c4eb500 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -157,6 +157,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceAlias; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPParameterPackType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization; @@ -1301,6 +1302,9 @@ public class CPPVisitor extends ASTQueries { final ICPPASTFieldReference fieldReference = (ICPPASTFieldReference) parent; IType type = fieldReference.getFieldOwnerType(); type= getUltimateTypeUptoPointers(type); + if (type instanceof ICPPParameterPackType) { + type = ((ICPPParameterPackType) type).getType(); + } if (type instanceof ICPPClassType) { type= SemanticUtil.mapToAST(type, fieldReference); return ((ICPPClassType) type).getCompositeScope();