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.