diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2009-11-16 05:16:40 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2009-11-16 05:16:40 +0000 |
commit | 011c4c341bd7c3ecded6b113d47058b072747e96 (patch) | |
tree | 80394e392dcb98d53aa4cb6d3e8176d9a2d86367 /clang/lib | |
parent | 794d4d812799c6db4d9ae2a1cc93b43d2815114b (diff) | |
download | bcm5719-llvm-011c4c341bd7c3ecded6b113d47058b072747e96.tar.gz bcm5719-llvm-011c4c341bd7c3ecded6b113d47058b072747e96.zip |
Implement two-argument form of delete operator.
llvm-svn: 88890
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/CodeGen/CGCXXExpr.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGCXXExpr.cpp b/clang/lib/CodeGen/CGCXXExpr.cpp index 3fbd2b242ab..9fb1059e881 100644 --- a/clang/lib/CodeGen/CGCXXExpr.cpp +++ b/clang/lib/CodeGen/CGCXXExpr.cpp @@ -325,6 +325,14 @@ void CodeGenFunction::EmitCXXDeleteExpr(const CXXDeleteExpr *E) { llvm::Value *DeletePtr = Builder.CreateBitCast(Ptr, ConvertType(ArgTy)); DeleteArgs.push_back(std::make_pair(RValue::get(DeletePtr), ArgTy)); + if (DeleteFTy->getNumArgs() == 2) { + QualType SizeTy = DeleteFTy->getArgType(1); + uint64_t SizeVal = getContext().getTypeSize(DeleteTy) / 8; + llvm::Constant *Size = llvm::ConstantInt::get(ConvertType(SizeTy), + SizeVal); + DeleteArgs.push_back(std::make_pair(RValue::get(Size), SizeTy)); + } + // Emit the call to delete. EmitCall(CGM.getTypes().getFunctionInfo(DeleteFTy->getResultType(), DeleteArgs), |