! { dg-do run } ! { dg-options "-fdec-structure" } ! ! Test passing STRUCTUREs through functions and subroutines. ! subroutine aborts (s) character(*), intent(in) :: s print *, s STOP 1 end subroutine module dec_structure_7m structure /s1/ integer i1 logical l1 real r1 character c1 end structure structure /s2/ integer i record /s1/ r1 endstructure contains ! Pass structure through subroutine subroutine sub (rec1, i) implicit none integer, intent(in) :: i record /s1/ rec1 rec1.i1 = i end subroutine ! Pass structure through function function func (rec2, r) implicit none real, intent(in) :: r record /s2/ rec2 real func rec2.r1.r1 = r func = rec2.r1.r1 return end function end module program dec_structure_7 use dec_structure_7m implicit none record /s1/ r1 record /s2/ r2 real junk ! Passing through functions and subroutines r1.i1 = 0 call sub (r1, 10) r2.r1.r1 = 0.0 junk = func (r2, -20.14) if (r1.i1 .ne. 10) then call aborts("sub(r1, 10)") endif if (r2.r1.r1 .ne. -20.14) then call aborts("func(r2, -20.14)") endif if (junk .ne. -20.14) then print *, junk call aborts("junk = func()") endif end program