Implement two-argument form of delete operator.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@88890 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGCXXExpr.cpp b/lib/CodeGen/CGCXXExpr.cpp
index 3fbd2b2..9fb1059 100644
--- a/lib/CodeGen/CGCXXExpr.cpp
+++ b/lib/CodeGen/CGCXXExpr.cpp
@@ -325,6 +325,14 @@
     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),