Automatic allocation failing when casting from integer to real(dp)

254 views Asked by At

I don't know whether I'm hitting a compiler bug or missing something. I'm attempting to run the following code:

program test
  implicit none

  integer, parameter :: dp=kind(1.d0)

  integer,  allocatable :: int_mat(:,:)
  integer,  allocatable :: int_mat_2(:,:)
  real(dp), allocatable :: real_mat(:,:)

  allocate(int_mat(2,2))
  int_mat = 0
  int_mat_2 = int_mat
  real_mat = int_mat ! Falls over here.
end program

Compiling and running with nagfor (flags: -f2003 -C=all) works as expected. Compiling and running with gfortran (flags: -std=f2003 -fcheck=all) fails at runtime with the error message:

At line 13 of file test.f90
Fortran runtime error: Array bound mismatch for dimension 1 of array 'real_mat' (1/2)

I would expect the code to succeed, as int_mat_2 and real_mat should be allocated implicitly. This seems to be happening correctly for int_mat_2 but not for real_mat.

I have tried this with various gfortran versions (5.4, 6.3, 7.0), and all have the same problem.

1

There are 1 answers

0
veryreverie On BEST ANSWER

As found by francescalus, this was this compiler bug, which has since been fixed for more recent gfortran versions.