I have encountered a strange error raised by ifort -check shape
with ifort (IFORT) 2021.2.0 20210228
. Here is a minimal working example.
! testshape.f90
program testshape
implicit none
integer :: a(1, 2)
a(:, :) = a(:, :) ! This line is OK. Benchmark for the erroneous line.
a(:, 1:2) = a(:, 1:2) ! This line is OK. Benchmark for the erroneous line.
a(:, [1, 2]) = a(:, [1, 2]) ! Do nothing ..., but it triggers the error.
end program testshape
Name this code as testshape.f90
, and then compile it. Here is what happens on my machine (Ubuntu 20.04).
$ ifort -check shape testshape.f90
testshape.f90(7): error #5581: Shape mismatch: The extent of dimension 1 of array A is 1 and the corresponding extent of array <RHS expression> is 2
a(:, [1, 2]) = a(:, [1, 2]) ! Do nothing ..., but it triggers the error.
^
compilation aborted for testshape.f90 (code 1)
If we remove -check shape
or replace it with -warn shape
, then everything works.
Did I misunderstand array indexing or miscalculate something in the code? Thank you for your attention.