From 4c700d7e5f83733e5157b66e31f9e4c0ef39faf1 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 2 Mar 2011 10:54:21 +0000 Subject: [PATCH] Bug 333389: Variadic function templates. --- .../core/parser/tests/ast2/AST2TemplateTests.java | 12 ++++++++++++ .../core/dom/parser/cpp/semantics/CPPTemplates.java | 12 +++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) 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;