From 81885d232fec146ec4c1d6c1fbac552daff416ea Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sun, 17 Feb 2013 20:28:11 -0500 Subject: [PATCH] Bug 401024 - Error involving variadic templates Change-Id: Ic5e0b3176e87e6dcecfb528367ce5f8eea4760c1 Reviewed-on: https://git.eclipse.org/r/10426 Reviewed-by: Sergey Prigogin IP-Clean: Sergey Prigogin Tested-by: Sergey Prigogin --- .../parser/tests/ast2/AST2TemplateTests.java | 49 +++++++++++++++++-- .../eclipse/cdt/core/dom/ast/ASTTypeUtil.java | 2 + 2 files changed, 46 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 31e4ef589b2..30a2844295d 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 @@ -4509,25 +4509,25 @@ public class AST2TemplateTests extends AST2TestBase { parseAndCheckBindings(code); BindingAssertionHelper bh= new BindingAssertionHelper(code, CPP); ICPPFunctionTemplate f= bh.assertNonProblem("f1", 2); - assertEquals("void (int (*)(#0 ...))", ASTTypeUtil.getType(f.getType(), true)); + assertEquals("void (int (*)(#0(...) ...))", ASTTypeUtil.getType(f.getType(), true)); assertFalse(f.getParameters()[0].isParameterPack()); f= bh.assertNonProblem("f2", 2); - assertEquals("void (int (* ...)(#0, int))", ASTTypeUtil.getType(f.getType(), true)); + assertEquals("void (int (* ...)(#0(...), int))", ASTTypeUtil.getType(f.getType(), true)); assertTrue(f.getParameters()[0].isParameterPack()); f= bh.assertNonProblem("f3", 2); - assertEquals("void (#0 (* ...)())", ASTTypeUtil.getType(f.getType(), true)); + assertEquals("void (#0(...) (* ...)())", ASTTypeUtil.getType(f.getType(), true)); assertTrue(f.getParameters()[0].isParameterPack()); f= bh.assertNonProblem("f4", 2); assertEquals("void (int (& ...)[3 *0 0])", ASTTypeUtil.getType(f.getType(), true)); assertTrue(f.getParameters()[0].isParameterPack()); f= bh.assertNonProblem("f5", 2); - assertEquals("void (#0 ...)", ASTTypeUtil.getType(f.getType(), true)); + assertEquals("void (#0(...) ...)", ASTTypeUtil.getType(f.getType(), true)); assertTrue(f.getParameters()[0].isParameterPack()); f= bh.assertNonProblem("f6", 2); assertEquals("void (#0, ...)", ASTTypeUtil.getType(f.getType(), true)); assertFalse(f.getParameters()[0].isParameterPack()); f= bh.assertNonProblem("f7", 2); - assertEquals("#0 ...", ASTTypeUtil.getType(f.getExceptionSpecification()[0], true)); + assertEquals("#0(...) ...", ASTTypeUtil.getType(f.getExceptionSpecification()[0], true)); } // template class C1 {}; @@ -7165,4 +7165,43 @@ public class AST2TemplateTests extends AST2TestBase { public void testDependentExpressionInvolvingFieldInNestedClass_399362() throws Exception { parseAndCheckBindings(); } + + // template + // struct remove_reference { + // typedef _Tp type; + // }; + // template + // struct A {}; + // template + // struct waldo { + // typedef typename remove_reference::type src_t; + // typedef A type; + // }; + // template + // struct ice_or { + // static const bool value = First; + // }; + // template + // struct is_waldo { + // static const bool value = false; + // }; + // template + // struct contains_waldo { + // static const bool value = ice_or::type>::value...>::value; + // }; + // template + // struct S {}; + // struct Cat { + // void meow(); + // }; + // template <> + // struct S { + // typedef Cat type; + // }; + // int main() { + // S::value>::type t; + // } + public void testVariadicTemplates_401024() throws Exception { + parseAndCheckBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java index 5a254287247..fd1a93fe467 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java @@ -424,6 +424,8 @@ public class ASTTypeUtil { if (normalize) { result.append('#'); result.append(Integer.toString(type.getParameterID(), 16)); + if (type.isParameterPack()) + result.append("(...)"); //$NON-NLS-1$ } else { result.append(type.getName()); }