forked from OSchip/llvm-project
Fixes a code gen. bug for array delete operator call
int 32bit abi (pr5472 related). -This line, and those below, will be ignored-- M lib/CodeGen/CGCXXExpr.cpp llvm-svn: 88695
This commit is contained in:
parent
225fa59cac
commit
f75c1f7a73
|
@ -284,12 +284,15 @@ void CodeGenFunction::EmitCXXDeleteExpr(const CXXDeleteExpr *E) {
|
||||||
llvm::Value *NumElementsPtr =
|
llvm::Value *NumElementsPtr =
|
||||||
Builder.CreateConstInBoundsGEP1_64(AllocatedObjectPtr,
|
Builder.CreateConstInBoundsGEP1_64(AllocatedObjectPtr,
|
||||||
CookieOffset);
|
CookieOffset);
|
||||||
|
NumElementsPtr = Builder.CreateBitCast(NumElementsPtr,
|
||||||
|
ConvertType(SizeTy)->getPointerTo());
|
||||||
|
|
||||||
NumElementsPtr =
|
|
||||||
Builder.CreateBitCast(NumElementsPtr,
|
|
||||||
llvm::Type::getInt64Ty(VMContext)->getPointerTo());
|
|
||||||
llvm::Value *NumElements =
|
llvm::Value *NumElements =
|
||||||
Builder.CreateLoad(NumElementsPtr);
|
Builder.CreateLoad(NumElementsPtr);
|
||||||
|
NumElements =
|
||||||
|
Builder.CreateIntCast(NumElements,
|
||||||
|
llvm::Type::getInt64Ty(VMContext), false,
|
||||||
|
"count.tmp");
|
||||||
assert (!Dtor->isVirtual() && "delete [] with virtual dtors NYI");
|
assert (!Dtor->isVirtual() && "delete [] with virtual dtors NYI");
|
||||||
EmitCXXAggrDestructorCall(Dtor, NumElements, Ptr);
|
EmitCXXAggrDestructorCall(Dtor, NumElements, Ptr);
|
||||||
Ptr = AllocatedObjectPtr;
|
Ptr = AllocatedObjectPtr;
|
||||||
|
|
Loading…
Reference in New Issue