记一个gcc7代编译器下allocate-source中有关ar

2023-07-19  本文已影响0人  别有路

Bug情况

最近写Fortran代码的时候遇到了个怪bug, 代码如下:

然后离谱的来了, 我发现在gcc750和gcc710里面跑出来的shape_data的lbound都是0, 也就是说index是从0开始的, 像C一样了...

但是在gcc11下面就没问题, 是从1开始的

而且下面注释那几行打开的话也没问题, 似乎就是传参进去才会有问题


module m1
  implicit none

contains
  subroutine m1s1(data)
    implicit none
    integer(kind=4),intent(in) :: data(:)

    integer, allocatable :: shape_data(:)

    allocate(shape_data, source=shape(data))
    ! allocate(shape_data(size(shape(data))), source=shape(data))   ! it's ok
    print *, ubound(shape_data), ubound(shape(data))
    print *, lbound(shape_data), lbound(shape(data))

  end subroutine
end module


program main
  use m1
  implicit none
  integer,allocatable :: a(:)


  call m1s1([1,2,3])
  
  !allocate(a, source=shape([4,4,5]))
  !print *, ubound(a)
  !print *, lbound(a)



end program

run一下:

DESKTOP-TKTNVE0:shape_bound$ gfortran --version
GNU Fortran (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

DESKTOP-TKTNVE0:shape_bound$ gfortran main.F90
DESKTOP-TKTNVE0:shape_bound$ ./a.out
           0           1
           0           1

解决思路

总结, 一个字, 离谱!

上一篇下一篇

猜你喜欢

热点阅读