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

            Bug ID: 93256
           Summary: Assumed-shape unlimited polymorphic variable passes
                    values incorrectly
           Product: gcc
           Version: 9.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jman012345 at gmail dot com
  Target Milestone: ---

If an unlimited polymorphic variable (using class(*)) of assumed shape is
passed, element by element, from one subroutine to another, the values are
passed in the wrong order. Here's an example:

program test
    implicit none
    real, dimension(3) :: a
    a = [10., 20., 30.]
    call sub1([a(1),a(2),a(3)])

    contains
    subroutine sub1(var)
        class(*), dimension(:) :: var
        integer :: i
        do i=1,size(var)
            call sub2(var(i))
        end do
    end subroutine

    subroutine sub2(var)
        class(*) :: var
        select type (var)
        type is (real)
            print *,var
        end select
    end subroutine
end program



The output of this program is
   20.0000000    
   30.0000000    
   10.0000000

However, if line 5 is changed to "call sub1(a)" then the output is
   10.0000000    
   20.0000000    
   30.0000000

Also, if sub1 is changed to:

    subroutine sub1(var)
        class(*), dimension(:) :: var
        integer :: i
        do i=1,size(var)
            select type (var)
            type is (real)
                call sub2(var(i))
            end select
        end do
    end subroutine

then output is the expected 10, 20, 30 formatted as above.

Reply via email to