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

            Bug ID: 81827
           Summary: Large compile time with derived-type rrays
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tkoenig at gcc dot gnu.org
  Target Milestone: ---

From https://gcc.gnu.org/ml/fortran/2017-08/msg00036.html
by Luke Robinson:

module alloc_stress

type level1
    real, allocatable :: var_r1(:), var_r2(:), var_r3(:), var_r4(:), var_r5(:)
    integer, allocatable :: var_i1(:), var_i2(:), var_i3(:), var_i4(:),
var_i5(:)
    complex, allocatable :: var_c1(:), var_c2(:), var_c3(:), var_c4(:),
var_c5(:)
    logical, allocatable :: and_this_makes_sixteen(:)
end type level1

type level2
    type(level1), allocatable :: var1(:), var2(:), var3(:), var4(:), var5(:)
end type level2

type level3
    type(level2), allocatable :: var1(:), var2(:), var3(:), var4(:), var5(:)
end type level3

type level4
    type(level3), allocatable :: var1(:), var2(:), var3(:), var4(:), var5(:)
end type level4

type level5
    type(level4), allocatable :: var1(:), var2(:), var3(:), var4(:), var5(:)
end type level5

end module alloc_stress

program main
    use alloc_stress
    implicit none
! change this to level 5 if your dare!
    type (level4), allocatable :: foo(:)
    allocate(foo(1))
end program

This has exponential compile times going up the levels.

Some cursory analysis shows that the size of the generated code
is quite large. With level5 and current trunk, we get

[tkoenig@gcc1-power7 Stress]$ wc  alloc_stress.f90.003t.original 
  173492  1997659 29708913 alloc_stress.f90.003t.original

Seems like the long time spent in the later stages of
compilation is simply the result of this enormous code size.

Reply via email to