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 46667e57dd4..cdae09cd34f 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 @@ -9059,4 +9059,19 @@ public class AST2CPPTests extends AST2BaseTest { dtor= (IASTImplicitNameOwner) name.getParent(); assertSame(ctor3, dtor.getImplicitNames()[0].resolveBinding()); } + + // namespace A { + // inline namespace B { + // namespace C { + // int i; + // } + // using namespace C; + // } + // int i; + // } + // int j = A::i; + public void testInlineNamespaceLookup_324096() throws Exception { + String code= getAboveComment(); + parseAndCheckBindings(code); + } } 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 8fda8c26a4b..bc4af461f03 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 @@ -5106,5 +5106,14 @@ public class AST2TemplateTests extends AST2BaseTest { public void testOverloadResolutionBetweenMethodTemplateAndFunction() throws Exception { final String code= getAboveComment(); parseAndCheckBindings(code); - } + } + + // template void f(T..., T...); + // void test() { + // f(1,1); + // } + public void testFunctionParameterPacksInNonFinalPosition_324096() throws Exception { + final String code= getAboveComment(); + parseAndCheckBindings(code); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index c75afefd90b..b2107373433 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -922,23 +922,20 @@ public class CPPTemplates { IType origType = types[i]; IType newType; if (origType instanceof ICPPParameterPackType) { - if (i != types.length-1) { + origType= ((ICPPParameterPackType) origType).getType(); + int packSize= determinePackSize(origType, tpMap); + if (packSize == PACK_SIZE_FAIL || packSize == PACK_SIZE_NOT_FOUND) { newType= new ProblemBinding(null, IProblemBinding.SEMANTIC_INVALID_TYPE); + } else if (packSize == PACK_SIZE_DEFER) { + newType= origType; } else { - origType= ((ICPPParameterPackType) origType).getType(); - int packSize= determinePackSize(origType, tpMap); - if (packSize == PACK_SIZE_FAIL || packSize == PACK_SIZE_NOT_FOUND) { - newType= new ProblemBinding(null, IProblemBinding.SEMANTIC_INVALID_TYPE); - } else if (packSize == PACK_SIZE_DEFER) { - newType= origType; - } else { - IType[] packResult= new IType[types.length+packSize-1]; - System.arraycopy(result, 0, packResult, 0, types.length-1); - for(int j=0; j