2015-09-01 32 views
1

我注意到gfortran一個怪異的行爲,我現在用的版本是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

+0

與此相同的錯誤? https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61337 –

+0

或更可能是這一個,請參閱最後的評論及其代碼https://gcc.gnu.org/bugzilla/show_bug.cgi?id = 58043絕對是一個錯誤。 –

+0

我用gfortran 4.8.3複製過。似乎固定在主幹上。 – francescalus

回答

2

我已經檢查了已報告的錯誤

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包含修復程序。

+0

感謝您的快速回答,它確實在gcc6中得到了修復 –

相關問題