https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86437
Bug ID: 86437 Summary: runtime segfault on Fortran code with large array and -Ofast Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: janus at gcc dot gnu.org Target Milestone: --- Reduced test case: program ACT implicit none integer, parameter :: N = 53, M = 20000 integer :: i integer, dimension(1:2*N) :: list real(8), dimension(:,:), allocatable :: Y1, Y2 do i=1,2*N list(i) = min(i, N) end do call DoAllocate(Y1, 1,N, 1,M) call DoAllocate(Y2, 1,2*N, 1,2*M) call ArrayCopy(Y2(list(1:N),1:M), Y1) contains subroutine DoAllocate(a, l1, u1, l2, u2) real(8), allocatable, intent(inout) :: a(:,:) integer, intent(in) :: l1, u1, l2, u2 allocate(a(l1:u1,l2:u2), source=0.0_8) end subroutine subroutine ArrayCopy(arrFrom, arrTo) real(8), dimension(:,:), intent(in) :: arrFrom real(8), dimension(:,:), intent(inout) :: arrTo arrTo(:,:) = arrFrom(:,:) end subroutine end When compiling this with any recent gfortran version (4.7.x up to 9-trunk) using -Ofast, I get a segfault at runtime. Things that make the segfault disappear: * using gfortran 4.6.4 * using smaller M (e.g. M=2000) * using -O1, -O2 or -O3 (with these I can even make M much larger, e.g. M=200000) Since the optimization level changes the behavior crucially, I assume this is more of a middle-end than a front-end issue.