From 0cc3dc369a21a4a2c1f2365500c05fd23fcc267f Mon Sep 17 00:00:00 2001 From: Alexey Prokhin Date: Tue, 2 Nov 2010 20:30:06 +0300 Subject: [PATCH] Fixed signature of _d_delarray() --- gen/llvmhelpers.cpp | 5 +++++ gen/runtime.cpp | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gen/llvmhelpers.cpp b/gen/llvmhelpers.cpp index 1bc4a4c8..40eb39f3 100644 --- a/gen/llvmhelpers.cpp +++ b/gen/llvmhelpers.cpp @@ -86,10 +86,15 @@ void DtoDeleteArray(DValue* arr) { // get runtime function llvm::Function* fn = LLVM_D_GetRuntimeFunction(gIR->module, "_d_delarray"); + // build args LLSmallVector 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()); } diff --git a/gen/runtime.cpp b/gen/runtime.cpp index b9531cde..30e3f350 100644 --- a/gen/runtime.cpp +++ b/gen/runtime.cpp @@ -431,12 +431,17 @@ static void LLVM_D_BuildRuntimeModule() ->setAttributes(Attr_NoAlias); } - // void _d_delarray(size_t plength, void* pdata) + // D1: void _d_delarray(size_t plength, void* pdata) + // D2: void _d_delarray(void[]* array) { llvm::StringRef fname("_d_delarray"); std::vector types; +#if DMDV2 + types.push_back(voidArrayPtrTy); +#else types.push_back(sizeTy); types.push_back(voidPtrTy); +#endif const llvm::FunctionType* fty = llvm::FunctionType::get(voidTy, types, false); llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M); }