mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-11 18:33:14 +01:00
Fixed calling of _d_delmemory() and _d_delinterface()
This commit is contained in:
@@ -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");
|
||||
|
||||
13
gen/toir.cpp
13
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()) {
|
||||
|
||||
Reference in New Issue
Block a user