https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119540
--- Comment #1 from anlauf at gcc dot gnu.org ---
The following testcase - derived from reduce_1.f90 - shows the reason for
a bound-check violation:
program test_reduce
implicit none
integer, parameter :: n = 3
integer, parameter :: vec(n) = [2, 5, 10]
integer, parameter :: mat(n,2) = reshape([vec,2*vec],shape=[size(vec),2])
integer, dimension(:), allocatable :: res1
print *, "shape (mat) =", shape (mat)
print *, "mat(:,1) =", mat(:,1)
print *, "mat(:,2) =", mat(:,2)
print *, "shape (reduce (mat, add, 1)):", shape (reduce (mat, add, 1))
print *, " reduce (mat, add, 1) :"
print *, reduce (mat, add, 1)
print *, "shape (reduce (mat, add, 2)):", shape (reduce (mat, add, 2))
print *, " reduce (mat, add, 2) :"
print *, reduce (mat, add, 2)
res1 = reduce (mat, add, 1)
if (any (res1 /= [17, 34])) stop 3
contains
pure function add(i,j) result(sum_ij)
integer, intent(in) :: i, j
integer :: sum_ij
sum_ij = i + j
end function add
end
% gfc-15 reduce_x.f90 -fcheck=all -g -O && ./a.out
shape (mat) = 3 2
mat(:,1) = 2 5 10
mat(:,2) = 4 10 20
shape (reduce (mat, add, 1)): 3
reduce (mat, add, 1) :
17 34 0
shape (reduce (mat, add, 2)): 3
reduce (mat, add, 2) :
6 15 30
At line 18 of file reduce_x.f90
Fortran runtime error: Array bound mismatch for dimension 1 of array 'res1'
(3/2)
Error termination. Backtrace:
#0 0x401437 in test_reduce
at /home/anlauf/gcc-bugs/reduce_x.f90:18
#1 0x401463 in main
at /home/anlauf/gcc-bugs/reduce_x.f90:18
Intel ifx gives:
shape (mat) = 3 2
mat(:,1) = 2 5 10
mat(:,2) = 4 10 20
shape (reduce (mat, add, 1)): 2
reduce (mat, add, 1) :
17 34
shape (reduce (mat, add, 2)): 3
reduce (mat, add, 2) :
6 15 30
Note that gfortran has a wrong array shape for dim=1.