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.