Gfortran 表现出奇怪的行为,这是一个错误吗?
Gfortran exhibits a weird behaviour, is this a bug?
我注意到 gfortran 有一个奇怪的行为,我使用的版本是
GNU Fortran (MacPorts gcc5 5.2.0_0) 5.2.0
我的 os 是 OS X YOSEMITE 10.10.3 (14D136)
i 运行下面的代码
program test
implicit none
type :: mytype
real(kind=8),dimension(:,:,:),allocatable :: f
end type
type(mytype),dimension(:,:),allocatable :: tab
integer i,j
allocate(tab(3,8))
do i=1,3
do j=1,8
allocate(tab(i,j)%f(i,i,i))
enddo
enddo
call check_shapes(tab(:,1))
contains
subroutine check_shapes(arg)
integer :: n,k
type(mytype),dimension(:) :: arg
n=size(arg)
do k=1,n
print*,shape(arg(k)%f)
enddo
end subroutine
end program
输出符合预期
1 1 1
2 2 2
3 3 3
然而,改变我在子例程中定义伪参数的方式
type(mytype),dimension(:) :: arg
到
class(mytype),dimension(:) :: arg
引入 class 而不是虚拟参数的类型,我有以下输出
2 2 2
3 3 3
1 1 1
这是一个错误吗?或者我错过了什么?
请注意,它与 ifort 配合使用效果很好
版本 Intel(R) 64,版本 15.0.3.187 Build 20150408
我已经检查了已经报告的错误
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61337
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58043
并且它们都(几乎完全)通过最近的提交(可能 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58043 )固定在 GCC 主干上。您的错误似乎只是这些报告的一个变体。
我已将有关最近更改的信息添加到现有报告中。您可以期待 GCC 6 包含此修复程序。
我注意到 gfortran 有一个奇怪的行为,我使用的版本是
GNU Fortran (MacPorts gcc5 5.2.0_0) 5.2.0
我的 os 是 OS X YOSEMITE 10.10.3 (14D136)
i 运行下面的代码
program test
implicit none
type :: mytype
real(kind=8),dimension(:,:,:),allocatable :: f
end type
type(mytype),dimension(:,:),allocatable :: tab
integer i,j
allocate(tab(3,8))
do i=1,3
do j=1,8
allocate(tab(i,j)%f(i,i,i))
enddo
enddo
call check_shapes(tab(:,1))
contains
subroutine check_shapes(arg)
integer :: n,k
type(mytype),dimension(:) :: arg
n=size(arg)
do k=1,n
print*,shape(arg(k)%f)
enddo
end subroutine
end program
输出符合预期
1 1 1
2 2 2
3 3 3
然而,改变我在子例程中定义伪参数的方式
type(mytype),dimension(:) :: arg
到
class(mytype),dimension(:) :: arg
引入 class 而不是虚拟参数的类型,我有以下输出
2 2 2
3 3 3
1 1 1
这是一个错误吗?或者我错过了什么?
请注意,它与 ifort 配合使用效果很好 版本 Intel(R) 64,版本 15.0.3.187 Build 20150408
我已经检查了已经报告的错误
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61337
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58043
并且它们都(几乎完全)通过最近的提交(可能 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58043 )固定在 GCC 主干上。您的错误似乎只是这些报告的一个变体。
我已将有关最近更改的信息添加到现有报告中。您可以期待 GCC 6 包含此修复程序。