diff options
author | Anders Carlsson <andersca@mac.com> | 2009-05-29 21:03:38 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-05-29 21:03:38 +0000 |
commit | 7267c1693abe7875b0c57268be05005ae013c6c9 (patch) | |
tree | b8990f2f322c9ef25b1ba811a3311e5c8294d616 /lib/CodeGen | |
parent | d249e1d1f1498b81314459ceda19d6ff25c278ad (diff) |
Add code for emitting C++ destructors. Not used yet.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72591 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CGCXX.cpp | 8 | ||||
-rw-r--r-- | lib/CodeGen/CodeGenFunction.h | 4 | ||||
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 2 |
3 files changed, 14 insertions, 0 deletions
diff --git a/lib/CodeGen/CGCXX.cpp b/lib/CodeGen/CGCXX.cpp index 94d69d846c..6ab59e11b6 100644 --- a/lib/CodeGen/CGCXX.cpp +++ b/lib/CodeGen/CGCXX.cpp @@ -166,6 +166,14 @@ CodeGenFunction::EmitCXXConstructorCall(const CXXConstructorDecl *D, EmitCXXMemberCall(D, Callee, This, ArgBeg, ArgEnd); } +void CodeGenFunction::EmitCXXDestructorCall(const CXXDestructorDecl *D, + CXXDtorType Type, + llvm::Value *This) { + llvm::Value *Callee = CGM.GetAddrOfCXXDestructor(D, Type); + + EmitCXXMemberCall(D, Callee, This, 0, 0); +} + void CodeGenFunction::EmitCXXConstructExpr(llvm::Value *Dest, const CXXConstructExpr *E) { diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index 7c54a4da04..d7d6c729ad 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -37,6 +37,7 @@ namespace llvm { namespace clang { class ASTContext; + class CXXDestructorDecl; class Decl; class EnumConstantDecl; class FunctionDecl; @@ -476,6 +477,9 @@ public: CallExpr::const_arg_iterator ArgBeg, CallExpr::const_arg_iterator ArgEnd); + void EmitCXXDestructorCall(const CXXDestructorDecl *D, CXXDtorType Type, + llvm::Value *This); + //===--------------------------------------------------------------------===// // Declaration Emission //===--------------------------------------------------------------------===// diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 04693fd502..b69301ed58 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -576,6 +576,8 @@ void CodeGenModule::EmitGlobalDefinition(GlobalDecl GD) { if (const CXXConstructorDecl *CD = dyn_cast<CXXConstructorDecl>(D)) EmitCXXConstructor(CD, GD.getCtorType()); + else if (const CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(D)) + EmitCXXDestructor(DD, GD.getDtorType()); else if (isa<FunctionDecl>(D)) EmitGlobalFunctionDefinition(GD); else if (const VarDecl *VD = dyn_cast<VarDecl>(D)) |