2012/11/30 Janus Weil <ja...@gcc.gnu.org>: > Hi, > >>> one thing that I do not like about your patch is the modification of >>> "gfc_find_derived_vtab": You create two versions of it, one of which creates >>> the vtab if it does not exist, while the other version does not do this. >>> [...] can you explain to me why this would be necessary? >> >> >> Well, strictly speaking it is not necessary. However, I use it in the >> to-be-submitted calling part of the patch: >> >> else if (al->expr->ts.type == BT_DERIVED) >> { >> gfc_symbol *vtab = gfc_find_derived_vtab >> (al->expr->ts.u.derived); >> if (vtab) >> >> Here, I do not want to force the generation of a vtab which wouldn't >> otherwise exist. Otherwise, one had to at least guard it by checks for >> nonextensible derived types (sequence, bind(C)). > > I don't think it is a good idea to base the decision whether to call a > finalizer on the presence of a vtab. In my version of the patch I > introduced a routine 'gfc_is_finalizable' to perform this decision.
Forgot to mention: My last version of the patch is available at http://gcc.gnu.org/ml/fortran/2012-11/msg00009.html Btw, one prerequisite for the implementation of finalization would be to have the following bug fixed: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55207 (which is about automatic deallocation in the main program). Cheers, Janus