https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81827

--- Comment #18 from rguenther at suse dot de <rguenther at suse dot de> ---
On Fri, 2 Mar 2018, pault at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81827
> 
> --- Comment #17 from Paul Thomas <pault at gcc dot gnu.org> ---
> 
> > There are two ways to fix this:
> > (i) Generate incomplete vtables, with the pointers to copy and finalise set
> > to null, for module derived types. This has the disadvantage that class
> > objects, such as the above, will still cause the compilation cascade; or
> > (ii) Call the functions associated with each derived type vtable at each
> > level.
> > 
> > My preference would be for the latter and I will set to seeing how it can be
> > done.
> > 
> > Cheers
> > 
> > Paul
> 
> Hi Richard,
> 
> I am waiting for a light bulb moment on this problem. The source of the 
> problem
> lies in the automatic deallocation and copying of allocatable derived type
> components. This is carried out be the chunk of code trans-array.c:8299-9396.
> The problem will remain, even if I carry out (i) and (ii) above. Every time
> that 'foo' in the reporter's testcase is allocated or if it were declared
> anywhere other than the main programme, the automatic 
> deallocation/finalisation
> will occur and this will cause the exponential code bloat on each and every
> occasion.
> 
> The 'obvious' way to deal with this is to ape the code in trans-array.c with
> library functions that make use of a reduced representation of the derived
> types (a list of offsets and pointers to the corresponding derived type
> component functions, where needed) or generated functions for each derived
> type. I am afraid that this will not happen overnight. Erik Edelman and I
> discussed this possibility originally but were put off by the complexity,
> compared with the present methodology, which has grown like Topsy since.
> 
> I propose to work on the other regressions/bugs that I have caused and to come
> back to this for 9.0.0.

Fair enough.  I read some original comment in this bug that the
recursive initialization is bogus in the first place though, so you say
all allocations are actually necessary?

Reply via email to