From: Iain Buclaw Date: Sun, 20 Feb 2022 23:06:16 +0000 (+0100) Subject: d: Remove handling of deleting GC allocated classes. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1d98337c6bebf41743dd3d1cc36222aa30e8f382;p=test_jj.git 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. --- diff --git a/gcc/d/expr.cc b/gcc/d/expr.cc index d5e4df7..2a7fb69 100644 --- a/gcc/d/expr.cc +++ b/gcc/d/expr.cc @@ -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 { diff --git a/gcc/d/runtime.def b/gcc/d/runtime.def index acb610f..534f866 100644 --- a/gcc/d/runtime.def +++ b/gcc/d/runtime.def @@ -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)