debugging - Gfortran 表现出奇怪的行为,这是一个错误吗?

标签 debugging fortran gfortran derived-types

我注意到 gfortran 有一个奇怪的行为,我使用的版本是

GNU Fortran (MacPorts gcc5 5.2.0_0) 5.2.0

我的操作系统是 OS X YOSEMITE 10.10.3 (14D136)

我运行以下代码

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

引入一个类而不是虚拟参数的类型,我有以下输出

       2           2           2
       3           3           3
       1           1           1

这是一个错误吗?或者我错过了什么?

请注意,它与 ifort 配合得很好 版本英特尔(R) 64,版本 15.0.3.187 内部版本 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 包含该修复程序。

关于debugging - Gfortran 表现出奇怪的行为,这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32331909/

相关文章:

c++ - 了解 Visual Studio 2010 中的监 window 口

c++ - 如何在 C++ 代码中调用模块中包含的 Fortran90 函数?

scope - 为什么类型不可访问?

string - 在Fortran中读取带空格的字符串

Fortran Coarrays : IFORT/GCC/Opencoarrays a bit confused

c++ - Mac OS 上 CodeBlocks 中的调试器设置

android - 拔下 USB 数据线后重新连接应用程序进行调试

c# - Intellisense 未显示代码隐藏中的新控件

fortran - 错误 : Non-numeric character in statement at label (1)

c - Visual Studio 不一致地生成 .lib