summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Decl.cpp
diff options
context:
space:
mode:
authorNuno Lopes <nunoplopes@sapo.pt>2008-12-17 23:39:55 +0000
committerNuno Lopes <nunoplopes@sapo.pt>2008-12-17 23:39:55 +0000
commit394ec984f2048b85abf3ab5eaddc3dd08d2c4d2d (patch)
treecae91413aa8cd77fab6abb1df94a4034ba5eee3d /clang/lib/AST/Decl.cpp
parent63ff81c4e1fe13a2f8db43bc6350f354772aa112 (diff)
downloadbcm5719-llvm-394ec984f2048b85abf3ab5eaddc3dd08d2c4d2d.tar.gz
bcm5719-llvm-394ec984f2048b85abf3ab5eaddc3dd08d2c4d2d.zip
fix leakage of var's initializers
llvm-svn: 61171
Diffstat (limited to 'clang/lib/AST/Decl.cpp')
-rw-r--r--clang/lib/AST/Decl.cpp32
1 files changed, 23 insertions, 9 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index dcefaa915b7..be8cbe7344d 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -14,6 +14,7 @@
#include "clang/AST/Decl.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Stmt.h"
+#include "clang/AST/Expr.h"
#include "clang/Basic/IdentifierTable.h"
using namespace clang;
@@ -48,15 +49,6 @@ ImplicitParamDecl *ImplicitParamDecl::Create(ASTContext &C, DeclContext *DC,
return new (Mem) ImplicitParamDecl(ImplicitParam, DC, L, Id, T, PrevDecl);
}
-VarDecl *VarDecl::Create(ASTContext &C, DeclContext *DC,
- SourceLocation L,
- IdentifierInfo *Id, QualType T,
- StorageClass S, ScopedDecl *PrevDecl,
- SourceLocation TypeSpecStartLoc) {
- void *Mem = C.getAllocator().Allocate<VarDecl>();
- return new (Mem) VarDecl(Var, DC, L, Id, T, S, PrevDecl, TypeSpecStartLoc);
-}
-
ParmVarDecl *ParmVarDecl::Create(ASTContext &C, DeclContext *DC,
SourceLocation L, IdentifierInfo *Id,
QualType T, StorageClass S,
@@ -166,6 +158,28 @@ ScopedDecl::~ScopedDecl() {
}
//===----------------------------------------------------------------------===//
+// VarDecl Implementation
+//===----------------------------------------------------------------------===//
+
+VarDecl *VarDecl::Create(ASTContext &C, DeclContext *DC,
+ SourceLocation L,
+ IdentifierInfo *Id, QualType T,
+ StorageClass S, ScopedDecl *PrevDecl,
+ SourceLocation TypeSpecStartLoc) {
+ void *Mem = C.getAllocator().Allocate<VarDecl>();
+ return new (Mem) VarDecl(Var, DC, L, Id, T, S, PrevDecl, TypeSpecStartLoc);
+}
+
+void VarDecl::Destroy(ASTContext& C) {
+ this->~VarDecl();
+ C.getAllocator().Deallocate((void *)this);
+}
+
+VarDecl::~VarDecl() {
+ delete getInit();
+}
+
+//===----------------------------------------------------------------------===//
// FunctionDecl Implementation
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud