https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79230
--- Comment #10 from janus at gcc dot gnu.org --- (In reply to janus from comment #8) > Another variant, which removes the naming collision (and dimension > attribute) in the character components, in order to make things clearer: > > > program main_ut > implicit none > > type :: data_t > character, allocatable :: c1 > end type > > type :: t1_t > character, allocatable :: c2 > class(data_t), pointer :: width_data > end type > > call evaluator > > contains > > subroutine evaluator > type(data_t), target :: par_real > type(t1_t) :: field > field%width_data => par_real > end subroutine > > end With version 6.2, the dump for this case looks like: evaluator () { struct t1_t field; struct data_t par_real; try { field.c2 = 0B; par_real.c1 = 0B; (struct __vtype_main_ut_Data_t *) field.width_data._vptr = &__vtab_main_ut_Data_t; field.width_data._data = &par_real; } finally { if (par_real.c1 != 0B) { __builtin_free ((void *) par_real.c1); } par_real.c1 = 0B; if (field.c2 != 0B) { __builtin_free ((void *) field.c2); } field.c2 = 0B; } } I.e. any deallocation/finalization code for the width_data case is missing, which is a potential memory leak.