Add TemplateArgument::CreatePackCopy() to create a new parameter pack
in ASTContext-allocated memory, copying the provided template
arguments. Use this new routine where we can. No functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123289 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp
index d0899c8..0a319b1 100644
--- a/lib/Sema/SemaTemplate.cpp
+++ b/lib/Sema/SemaTemplate.cpp
@@ -2556,13 +2556,12 @@
     if ((*Param)->isTemplateParameterPack()) {     
       if (PartialTemplateArgs && ArgumentPack.empty()) {
         Converted.push_back(TemplateArgument());
-      } else if (ArgumentPack.empty()) {
+      } else if (ArgumentPack.empty())
         Converted.push_back(TemplateArgument(0, 0));
-      } else {
-        TemplateArgument *PackedArgs
-          = new (Context) TemplateArgument [ArgumentPack.size()];
-        std::copy(ArgumentPack.begin(), ArgumentPack.end(), PackedArgs);
-        Converted.push_back(TemplateArgument(PackedArgs, ArgumentPack.size()));
+      else {
+        Converted.push_back(TemplateArgument::CreatePackCopy(Context, 
+                                                          ArgumentPack.data(), 
+                                                         ArgumentPack.size()));
         ArgumentPack.clear();
       }
     }