! { dg-do compile } ! ! TS 29113 ! C407b An assumed-type variable name shall not appear in a designator ! or expression except as an actual argument corresponding to a dummy ! argument that is assumed-type, or as the first argument to any of ! the intrinsic and intrinsic module functions IS_CONTIGUOUS, LBOUND, ! PRESENT, RANK, SHAPE, SIZE, UBOUND, and C_LOC. ! ! This test file contains tests that are expected to all pass. ! Check that passing an assumed-type variable as an actual argument ! corresponding to an assumed-type dummy works. module m interface subroutine g (a, b) implicit none type(*) :: a integer :: b end subroutine end interface end module subroutine s0 (x) use m implicit none type(*) :: x call g (x, 1) end subroutine ! Check that calls to the permitted intrinsic functions work. function test_is_contiguous (a) implicit none type(*) :: a(*) logical :: test_is_contiguous test_is_contiguous = is_contiguous (a) end function function test_lbound (a) implicit none type(*) :: a(:) integer :: test_lbound test_lbound = lbound (a, 1) end function function test_present (a) implicit none type(*), optional :: a(*) logical :: test_present test_present = present (a) end function function test_rank (a) implicit none type(*) :: a(*) integer :: test_rank test_rank = rank (a) end function function test_shape (a) implicit none type(*) :: a(:) ! assumed-shape array so shape intrinsic works integer :: test_shape integer :: temp, i integer, dimension (rank (a)) :: ashape temp = 1 ashape = shape (a) do i = 1, rank (a) temp = temp * ashape (i) end do test_shape = temp end function function test_size (a) implicit none type(*) :: a(:) integer :: test_size test_size = size (a) end function function test_ubound (a) implicit none type(*) :: a(:) integer :: test_ubound test_ubound = ubound (a, 1) end function function test_c_loc (a) use iso_c_binding implicit none type(*), target :: a(*) type(c_ptr) :: test_c_loc test_c_loc = c_loc (a) end function