--- 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.