! { dg-do run } ! { dg-additional-sources assumed_rank_8_c.c } ! ! PR fortran/48820 ! ! Scalars to assumed-rank tests ! program main implicit none type t integer :: i end type t interface subroutine check (x) integer :: x(..) end subroutine check subroutine check2 (x) import t class(t) :: x(..) end subroutine check2 end interface integer :: j type(t), target :: y class(t), allocatable, target :: yac y%i = 489 allocate (yac) yac%i = 489 j = 0 call fc() call fc(null()) call fc(y) call fc(yac) if (j /= 2) call abort () j = 0 call gc(null()) call gc(y) call gc(yac) deallocate (yac) call gc(yac) if (j /= 2) call abort () j = 0 call hc(yac) allocate (yac) yac%i = 489 call hc(yac) if (j /= 1) call abort () j = 0 call ft() call ft(null()) call ft(y) call ft(yac) if (j /= 2) call abort () j = 0 call gt(null()) call gt(y) call gt(yac) deallocate (yac) call gt(yac) if (j /= 2) call abort () j = 0 call ht(yac) allocate (yac) yac%i = 489 call ht(yac) if (j /= 1) call abort () contains subroutine fc (x) class(t), optional :: x(..) if (.not. present (x)) return if (.not. SAME_TYPE_AS (x, yac)) call abort () if (rank (x) /= 0) call abort call check2 (x) j = j + 1 end subroutine subroutine gc (x) class(t), pointer, intent(in) :: x(..) if (.not. associated (x)) return if (.not. SAME_TYPE_AS (x, yac)) call abort () if (rank (x) /= 0) call abort () call check2 (x) j = j + 1 end subroutine subroutine hc (x) class(t), allocatable :: x(..) if (.not. allocated (x)) return if (.not. SAME_TYPE_AS (x, yac)) call abort () if (rank (x) /= 0) call abort call check2 (x) j = j + 1 end subroutine subroutine ft (x) type(t), optional :: x(..) if (.not. present (x)) return if (.not. SAME_TYPE_AS (x, yac)) call abort () if (rank (x) /= 0) call abort call check2 (x) j = j + 1 end subroutine subroutine gt (x) type(t), pointer, intent(in) :: x(..) if (.not. associated (x)) return if (.not. SAME_TYPE_AS (x, yac)) call abort () if (rank (x) /= 0) call abort () call check2 (x) j = j + 1 end subroutine subroutine ht (x) type(t), allocatable :: x(..) if (.not. allocated (x)) return if (.not. SAME_TYPE_AS (x, yac)) call abort () if (rank (x) /= 0) call abort call check2 (x) j = j + 1 end subroutine end program main