https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82009
--- Comment #10 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> --- In the tree dump, the declaration for idxs is missing for the first subroutine. I have modified to the following example so one can see it is not symbol name conflicts. MODULE sparse_matrix_csx_benchmark_utils IMPLICIT NONE CONTAINS SUBROUTINE sparse_matrix_csr_benchmark ( ) WRITE(*,*) 'At*x: t1' block integer, dimension(1), parameter :: idxs1=[1] integer :: i, idx do i = 1, size(idxs1) idx = idxs1(i) enddo end block END SUBROUTINE sparse_matrix_csr_benchmark SUBROUTINE sparse_matrix_csc_benchmark ( ) WRITE(*,*) 'An*x: t2' block integer, dimension(1), parameter :: idxs2=[1] integer :: i, idx do i = 1, size(idxs2) idx = idxs2(i) enddo end block END SUBROUTINE sparse_matrix_csc_benchmark END MODULE sparse_matrix_csx_benchmark_utils program main use sparse_matrix_csx_benchmark_utils call sparse_matrix_csr_benchmark () call sparse_matrix_csc_benchmark () end program and the tree dump: sparse_matrix_csc_benchmark () { { integer(kind=4) i; integer(kind=4) idx; { struct __st_parameter_dt dt_parm.0; dt_parm.0.common.filename = &"pr82009.f03"[1]{lb: 1 sz: 1}; dt_parm.0.common.line = 15; dt_parm.0.common.flags = 128; dt_parm.0.common.unit = 6; _gfortran_st_write (&dt_parm.0); _gfortran_transfer_character_write (&dt_parm.0, &"An*x: t2"[1]{lb: 1 sz: 1}, 8); _gfortran_st_write_done (&dt_parm.0); } i = 1; while (1) { { logical(kind=4) D.3777; D.3777 = i > 1; if (D.3777) goto L.3; idx = idxs2[(integer(kind=8)) i + -1]; L.2:; i = i + 1; } } L.3:; L.1:; } } sparse_matrix_csr_benchmark () { { static integer(kind=4) idxs2[1] = {1}; integer(kind=4) i; integer(kind=4) idx; { struct __st_parameter_dt dt_parm.1; dt_parm.1.common.filename = &"pr82009.f03"[1]{lb: 1 sz: 1}; dt_parm.1.common.line = 5; dt_parm.1.common.flags = 128; dt_parm.1.common.unit = 6; _gfortran_st_write (&dt_parm.1); _gfortran_transfer_character_write (&dt_parm.1, &"At*x: t1"[1]{lb: 1 sz: 1}, 8); _gfortran_st_write_done (&dt_parm.1); } i = 1; while (1) { { logical(kind=4) D.3786; D.3786 = i > 1; if (D.3786) goto L.6; idx = idxs1[(integer(kind=8)) i + -1]; L.5:; i = i + 1; } } L.6:; L.4:; } } MAIN__ () { sparse_matrix_csr_benchmark (); sparse_matrix_csc_benchmark (); } __attribute__((externally_visible)) main (integer(kind=4) argc, character(kind=1) * * argv) { static integer(kind=4) options.2[7] = {2116, 4095, 0, 1, 1, 0, 31}; _gfortran_set_args (argc, argv); _gfortran_set_options (7, &options.2[0]); MAIN__ (); return 0; }