This is a bug that affects all flang-based compilers: classic flang 7.0.1, Huawei Bisheng flang 1.3.3, NVIDIA nvfortran 22.3, and AOCC 3.2.0 flang. They raise a false positive error of out-bound subscripts when invoked with the -Mbounds flag.
Here is a minimal working example. The latest version of the code is available at my GitHub repo dedicated to testing Fortran compilers.
! test_solve.f90
module solve_mod
implicit none
private
public :: solve
contains
function solve(A, b) result(x) ! A naive solver for upper-triangle linear systems
implicit none
real, intent(in) :: A(:, :), b(:)
real :: x(size(A, 2))
integer :: i, n
n = size(b)
do i = n, 1, -1
x(i) = (b(i) - inprod(A(i, i + 1:n), x(i + 1:n))) / A(i, i)
!x(i) = (b(i) - dot_product(A(i, i + 1:n), x(i + 1:n))) / A(i, i) ! No problem will arise
end do
end function solve
function inprod(x, y) result(z)
real, intent(in) :: x(:), y(:)
real :: z
z = dot_product(x, y)
end function inprod
end module solve_mod
program test_solve
use, non_intrinsic :: solve_mod, only : solve
implicit none
real :: A(1, 1), b(1)
A = 1.0
b = 1.0
write (*, *) solve(A, b)
end program test_solve
The error message looks like the following.
$ flang -Mbounds test_solve.f90 && ./a.out
0: Subscript out of range for array x (test_solve.f90: 19)
subscript=2, lower bound=1, upper bound=1, dimension=1
Thank you for having a look at it.
This is a bug that affects all flang-based compilers: classic flang 7.0.1, Huawei Bisheng flang 1.3.3, NVIDIA nvfortran 22.3, and AOCC 3.2.0 flang. They raise a false positive error of out-bound subscripts when invoked with the
-Mboundsflag.Here is a minimal working example. The latest version of the code is available at my GitHub repo dedicated to testing Fortran compilers.
The error message looks like the following.
Thank you for having a look at it.