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:
Fariborz Jahanian 2009-11-13 21:20:14 +00:00
parent 225fa59cac
commit f75c1f7a73
1 changed files with 6 additions and 3 deletions

View File

@ -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;