diff --git a/gen/runtime.cpp b/gen/runtime.cpp index 7b7bfd99..96e76998 100644 --- a/gen/runtime.cpp +++ b/gen/runtime.cpp @@ -457,9 +457,14 @@ static void LLVM_D_BuildRuntimeModule() llvm::Function::Create(fty, llvm::GlobalValue::ExternalLinkage, fname, M); } + // D1: // void _d_delmemory(void* p) // void _d_delinterface(void* p) // void _d_callfinalizer(void* p) + // D2: + // void _d_delmemory(void **p) + // void _d_delinterface(void **p) + // void _d_callfinalizer(void *p) { llvm::StringRef fname("_d_delmemory"); llvm::StringRef fname2("_d_delinterface"); diff --git a/gen/toir.cpp b/gen/toir.cpp index bc3a7767..3aeaef49 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -1749,11 +1749,15 @@ DValue* DeleteExp::toElem(IRState* p) // simple pointer if (et->ty == Tpointer) - { + { +#if DMDV2 + DtoDeleteMemory(dval->isLVal() ? dval->getLVal() : makeLValue(loc, dval)); +#else LLValue* rval = dval->getRVal(); DtoDeleteMemory(rval); if (dval->isVar()) DtoStore(LLConstant::getNullValue(rval->getType()), dval->getLVal()); +#endif } // class else if (et->ty == Tclass) @@ -1762,7 +1766,12 @@ DValue* DeleteExp::toElem(IRState* p) TypeClass* tc = (TypeClass*)et; if (tc->sym->isInterfaceDeclaration()) { - DtoDeleteInterface(dval->getRVal()); +#if DMDV2 + LLValue *val = dval->getLVal(); +#else + LLValue *val = dval->getRVal(); +#endif + DtoDeleteInterface(val); onstack = true; } else if (DVarValue* vv = dval->isVar()) {