d: Remove handling of deleting GC allocated classes.
Now that the `delete' keyword has been removed from the front-end, only compiler-generated uses of DeleteExp reach the code generator via the auto-destruction of `scope class' variables. The run-time library helpers that previously were used to delete GC class objects can now be removed from the compiler. gcc/d/ChangeLog: * expr.cc (ExprVisitor::visit (DeleteExp *)): Remove handling of deleting GC allocated classes. * runtime.def (DELCLASS): Remove. (DELINTERFACE): Remove.
This commit is contained in:
parent
6384eff56d
commit
1d98337c6b
@ -1438,28 +1438,16 @@ public:
|
||||
{
|
||||
/* For class object references, if there is a destructor for that class,
|
||||
the destructor is called for the object instance. */
|
||||
libcall_fn libcall;
|
||||
gcc_assert (e->e1->op == EXP::variable);
|
||||
|
||||
if (e->e1->op == EXP::variable)
|
||||
{
|
||||
VarDeclaration *v = e->e1->isVarExp ()->var->isVarDeclaration ();
|
||||
if (v && v->onstack)
|
||||
{
|
||||
libcall = tb1->isClassHandle ()->isInterfaceDeclaration ()
|
||||
? LIBCALL_CALLINTERFACEFINALIZER : LIBCALL_CALLFINALIZER;
|
||||
VarDeclaration *v = e->e1->isVarExp ()->var->isVarDeclaration ();
|
||||
gcc_assert (v && v->onstack);
|
||||
|
||||
this->result_ = build_libcall (libcall, Type::tvoid, 1, t1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
libcall_fn libcall = tb1->isClassHandle ()->isInterfaceDeclaration ()
|
||||
? LIBCALL_CALLINTERFACEFINALIZER : LIBCALL_CALLFINALIZER;
|
||||
|
||||
/* Otherwise, the garbage collector is called to immediately free the
|
||||
memory allocated for the class instance. */
|
||||
libcall = tb1->isClassHandle ()->isInterfaceDeclaration ()
|
||||
? LIBCALL_DELINTERFACE : LIBCALL_DELCLASS;
|
||||
|
||||
t1 = build_address (t1);
|
||||
this->result_ = build_libcall (libcall, Type::tvoid, 1, t1);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -63,11 +63,7 @@ DEF_D_RUNTIME (ARRAYBOUNDS_INDEXP, "_d_arraybounds_indexp", RT(VOID),
|
||||
DEF_D_RUNTIME (NEWCLASS, "_d_newclass", RT(OBJECT), P1(CONST_CLASSINFO), 0)
|
||||
DEF_D_RUNTIME (NEWTHROW, "_d_newThrowable", RT(OBJECT), P1(CONST_CLASSINFO), 0)
|
||||
|
||||
/* Used when calling delete on a class or interface. */
|
||||
DEF_D_RUNTIME (DELCLASS, "_d_delclass", RT(VOID), P1(VOIDPTR), 0)
|
||||
DEF_D_RUNTIME (DELINTERFACE, "_d_delinterface", RT(VOID), P1(VOIDPTR), 0)
|
||||
|
||||
/* Same as deleting a class, but used for stack-allocated classes. */
|
||||
/* Used when calling delete on a stack-allocated class or interface. */
|
||||
DEF_D_RUNTIME (CALLFINALIZER, "_d_callfinalizer", RT(VOID), P1(VOIDPTR), 0)
|
||||
DEF_D_RUNTIME (CALLINTERFACEFINALIZER, "_d_callinterfacefinalizer", RT(VOID),
|
||||
P1(VOIDPTR), 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user