[Bug fortran/81827] Large compile time with derived-type rrays

rguenther at suse dot de gcc-bugzilla@gcc.gnu.org
Fri Mar 2 11:11:00 GMT 2018


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?


More information about the Gcc-bugs mailing list