Search code examples
debuggingfortrangfortranderived-types

Gfortran exhibits a weird behaviour, is this a bug?


I noticed a weird behaviour with gfortran, the version i am using is

GNU Fortran (MacPorts gcc5 5.2.0_0) 5.2.0

my os is OS X YOSEMITE 10.10.3 (14D136)

i run the following code

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

The output is as expected

       1           1           1
       2           2           2
       3           3           3

however, change the way i define dummy arguments in the subroutine

type(mytype),dimension(:) :: arg

to

class(mytype),dimension(:) :: arg

introducing a class instead of type for the dummy argument, i have the following output

       2           2           2
       3           3           3
       1           1           1

Is this a bug? or i am missing something?

note that it works fine with ifort version Intel(R) 64, Version 15.0.3.187 Build 20150408


Solution

  • I have checked the already reported bugs

    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61337

    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58043

    and both of them are (almost completely) fixed on the GCC trunk by a recent commit (probably https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58043 ). Your bug appears to be just a variant of these reports.

    I have added the information about the recent change to the existing reports. You can expect GCC 6 to contain the fix.