aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/DeclTemplate.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-05-25 20:43:29 +0000
committerTed Kremenek <kremenek@apple.com>2010-05-25 20:43:29 +0000
commit3458d43b68cc2fd1cb2b2304614e1dc3419820d8 (patch)
treeed82c0ffd8f564e219b9986b83b797e197b7d955 /lib/AST/DeclTemplate.cpp
parentff3dc395ba08b3a3cadc8d3121a4cb086ab287d6 (diff)
Allocate the contents of TemplateArgumentList using ASTContext's allocator. This fixes
a massive memory leak when using a BumpPtrAllocator in ASTContext. Added a FIXME, as the Destroy method for TemplateArgumentList isn't getting called. This means we will instead leak when using the MallocAllocator. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104633 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/DeclTemplate.cpp')
-rw-r--r--lib/AST/DeclTemplate.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/AST/DeclTemplate.cpp b/lib/AST/DeclTemplate.cpp
index 17bd2217fc..26e291c94f 100644
--- a/lib/AST/DeclTemplate.cpp
+++ b/lib/AST/DeclTemplate.cpp
@@ -374,7 +374,8 @@ TemplateArgumentList::TemplateArgumentList(ASTContext &Context,
// If this does take ownership of the arguments, then we have to new them
// and copy over.
- TemplateArgument *NewArgs = new TemplateArgument[Builder.flatSize()];
+ TemplateArgument *NewArgs =
+ new (Context) TemplateArgument[Builder.flatSize()];
std::copy(Builder.getFlatArguments(),
Builder.getFlatArguments()+Builder.flatSize(), NewArgs);
FlatArguments.setPointer(NewArgs);
@@ -384,7 +385,8 @@ TemplateArgumentList::TemplateArgumentList(ASTContext &Context,
StructuredArguments.setPointer(NewArgs);
StructuredArguments.setInt(0);
} else {
- TemplateArgument *NewSArgs = new TemplateArgument[Builder.flatSize()];
+ TemplateArgument *NewSArgs =
+ new (Context) TemplateArgument[Builder.flatSize()];
std::copy(Builder.getFlatArguments(),
Builder.getFlatArguments()+Builder.flatSize(), NewSArgs);
StructuredArguments.setPointer(NewSArgs);
@@ -401,13 +403,15 @@ TemplateArgumentList::TemplateArgumentList(const TemplateArgumentList *Other)
StructuredArguments(Other->StructuredArguments.getPointer(), false),
NumStructuredArguments(Other->NumStructuredArguments) { }
-TemplateArgumentList::~TemplateArgumentList() {
+void TemplateArgumentList::Destroy(ASTContext &C) {
if (FlatArguments.getInt())
- delete [] FlatArguments.getPointer();
+ C.Deallocate((void*)FlatArguments.getPointer());
if (StructuredArguments.getInt())
- delete [] StructuredArguments.getPointer();
+ C.Deallocate((void*)StructuredArguments.getPointer());
}
+TemplateArgumentList::~TemplateArgumentList() {}
+
//===----------------------------------------------------------------------===//
// ClassTemplateSpecializationDecl Implementation
//===----------------------------------------------------------------------===//