Call d_delarray_t() instead of _d_delarray()

This commit is contained in:
Alexey Prokhin 2010-12-19 15:51:00 +03:00
parent 48d89916ef
commit 44593f6220
2 changed files with 41 additions and 13 deletions

View file

@ -82,6 +82,24 @@ void DtoDeleteInterface(LLValue* inst)
gIR->CreateCallOrInvoke(fn, arg.begin(), arg.end());
}
#if DMDV2
void DtoDeleteArray(DValue* arr)
{
// get runtime function
llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_delarray_t");
// build args
LLSmallVector<LLValue*,2> arg;
arg.push_back(DtoBitCast(arr->getLVal(), fn->getFunctionType()->getParamType(0)));
arg.push_back(DtoBitCast(DtoTypeInfoOf(arr->type->nextOf()), fn->getFunctionType()->getParamType(1)));
// call
gIR->CreateCallOrInvoke(fn, arg.begin(), arg.end());
}
#else
void DtoDeleteArray(DValue* arr)
{
// get runtime function
@ -89,16 +107,15 @@ void DtoDeleteArray(DValue* arr)
// build args
LLSmallVector<LLValue*,2> arg;
#if DMDV2
arg.push_back(DtoBitCast(arr->getLVal(), fn->getFunctionType()->getParamType(0)));
#else
arg.push_back(DtoArrayLen(arr));
arg.push_back(DtoBitCast(DtoArrayPtr(arr), getVoidPtrType(), ".tmp"));
#endif
// call
gIR->CreateCallOrInvoke(fn, arg.begin(), arg.end());
}
#endif
/****************************************************************************************/
/*////////////////////////////////////////////////////////////////////////////////////////
// ALLOCA HELPERS