mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-06 10:57:35 +03:00
Fixed calling of _d_delmemory() and _d_delinterface()
This commit is contained in:
parent
349a6c1c3f
commit
7e6807b0df
2 changed files with 16 additions and 2 deletions
|
@ -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");
|
||||
|
|
11
gen/toir.cpp
11
gen/toir.cpp
|
@ -1750,10 +1750,14 @@ 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()) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue