diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-11-07 23:05:16 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-11-07 23:05:16 +0000 |
commit | 910f8008fea79120489a53593fe971b0b8a4a740 (patch) | |
tree | b263cbb7e92326a5d6c93db97de8737d388e3dcc /lib/Sema/SemaTemplateInstantiateDecl.cpp | |
parent | dc1b76ddfc687c713a55cc9e3e054e9a0de1aa74 (diff) |
Remove broken support for variadic templates, along with the various
abstractions (e.g., TemplateArgumentListBuilder) that were designed to
support variadic templates. Only a few remnants of variadic templates
remain, in the parser (parsing template type parameter packs), AST
(template type parameter pack bits and TemplateArgument::Pack), and
Sema; these are expected to be used in a future implementation of
variadic templates.
But don't get too excited about that happening now.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@118385 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r-- | lib/Sema/SemaTemplateInstantiateDecl.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index a594e678d6..c4bcc1e7d9 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -1102,7 +1102,7 @@ Decl *TemplateDeclInstantiator::VisitFunctionDecl(FunctionDecl *D, std::pair<const TemplateArgument *, unsigned> Innermost = TemplateArgs.getInnermost(); Function->setFunctionTemplateSpecialization(FunctionTemplate, - new (SemaRef.Context) TemplateArgumentList(SemaRef.Context, + TemplateArgumentList::CreateCopy(SemaRef.Context, Innermost.first, Innermost.second), InsertPos); @@ -1410,9 +1410,9 @@ TemplateDeclInstantiator::VisitCXXMethodDecl(CXXMethodDecl *D, std::pair<const TemplateArgument *, unsigned> Innermost = TemplateArgs.getInnermost(); Method->setFunctionTemplateSpecialization(FunctionTemplate, - new (SemaRef.Context) TemplateArgumentList(SemaRef.Context, - Innermost.first, - Innermost.second), + TemplateArgumentList::CreateCopy(SemaRef.Context, + Innermost.first, + Innermost.second), InsertPos); } else if (!isFriend) { // Record that this is an instantiation of a member function. @@ -1842,8 +1842,7 @@ TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization( // Check that the template argument list is well-formed for this // class template. - TemplateArgumentListBuilder Converted(ClassTemplate->getTemplateParameters(), - InstTemplateArgs.size()); + llvm::SmallVector<TemplateArgument, 4> Converted; if (SemaRef.CheckTemplateArgumentList(ClassTemplate, PartialSpec->getLocation(), InstTemplateArgs, @@ -1855,15 +1854,15 @@ TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization( // in the member template's set of class template partial specializations. void *InsertPos = 0; ClassTemplateSpecializationDecl *PrevDecl - = ClassTemplate->findPartialSpecialization(Converted.getFlatArguments(), - Converted.flatSize(), InsertPos); + = ClassTemplate->findPartialSpecialization(Converted.data(), + Converted.size(), InsertPos); // Build the canonical type that describes the converted template // arguments of the class template partial specialization. QualType CanonType = SemaRef.Context.getTemplateSpecializationType(TemplateName(ClassTemplate), - Converted.getFlatArguments(), - Converted.flatSize()); + Converted.data(), + Converted.size()); // Build the fully-sugared type for this class template // specialization as the user wrote in the specialization @@ -1911,7 +1910,8 @@ TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization( PartialSpec->getLocation(), InstParams, ClassTemplate, - Converted, + Converted.data(), + Converted.size(), InstTemplateArgs, CanonType, 0, |