https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81827
--- Comment #19 from Paul Thomas <pault at gcc dot gnu.org> --- There are at least three sources of the recursive code: (i) The allocate statement. This checks to see if the allocate object and its allocatable components are allocated and deallocates them if necessary. I must check if the standard requires this! (ii) The vtable 'final' procedure. This calls any user defined 'final' procedures first, goes on to do the same for the allocatable components, and then, after each 'final' call, dealloactes if necessary. (iii) The vtable 'copy'. This is a deep copy of the object and its allocatable components. It generates a load of code in consequence. The answer is, yes, these recursive procedures are necessary. I just need to find some less compile time intensive way of implementing them. Cheers Paul