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 8d9803b3dc5..593ab609a97 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 @@ -5266,4 +5266,16 @@ public class AST2TemplateTests extends AST2BaseTest { public void testFunctionCallOnDependentName_Bug337686() throws Exception { parseAndCheckBindings(); } + + // struct S {}; + // template void h(S s, Args... args) {} + // void g() { + // S s; + // h(s); + // h(s, 1); Variadicsd f + // h(s, 1, 2); + // } + public void testVariadicFunctionTemplate_Bug333389() throws Exception { + parseAndCheckBindings(); + } } 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 6c670a4a8af..282f9e2539b 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 @@ -946,11 +946,13 @@ public class CPPTemplates { } if (result != types) { result[j++]= newType; - } else if (newType != origType) { - result = new IType[types.length]; - j= i; - System.arraycopy(types, 0, result, 0, i); - result[j++]= newType; + } else { + if (newType != origType) { + result = new IType[types.length]; + System.arraycopy(types, 0, result, 0, i); + result[j]= newType; + } + j++; } } return result;