! Test lowering of derived type dummy arguments ! RUN: bbc -emit-fir %s -o - | FileCheck %s module type_defs type simple_type integer :: i end type type with_kind(k) integer, kind :: k real(k) :: x end type end module ! ----------------------------------------------------------------------------- ! Test passing of derived type arguments that do not require a ! fir.box (runtime descriptor). ! ----------------------------------------------------------------------------- ! Test simple type scalar with no attribute. ! CHECK-LABEL: func @_QPtest1( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref> {fir.bindc_name = "a"}) { subroutine test1(a) use type_defs type(simple_type) :: a end subroutine ! Test simple type explicit array with no attribute. ! CHECK-LABEL: func @_QPtest2( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref>> {fir.bindc_name = "a"}) { subroutine test2(a) use type_defs type(simple_type) :: a(100) end subroutine ! Test simple type scalar with TARGET attribute. ! CHECK-LABEL: func @_QPtest3( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref> {fir.bindc_name = "a", fir.target}) { subroutine test3(a) use type_defs type(simple_type), target :: a end subroutine ! Test simple type explicit array with TARGET attribute. ! CHECK-LABEL: func @_QPtest4( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref>> {fir.bindc_name = "a", fir.target}) { subroutine test4(a) use type_defs type(simple_type), target :: a(100) end subroutine ! Test kind parametrized derived type scalar with no attribute. ! CHECK-LABEL: func @_QPtest1k( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref> {fir.bindc_name = "a"}) { subroutine test1k(a) use type_defs type(with_kind(4)) :: a end subroutine ! Test kind parametrized derived type explicit array with no attribute. ! CHECK-LABEL: func @_QPtest2k( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref>> {fir.bindc_name = "a"}) { subroutine test2k(a) use type_defs type(with_kind(4)) :: a(100) end subroutine ! Test kind parametrized derived type scalar with TARGET attribute. ! CHECK-LABEL: func @_QPtest3k( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref> {fir.bindc_name = "a", fir.target}) { subroutine test3k(a) use type_defs type(with_kind(4)), target :: a end subroutine ! Test kind parametrized derived type explicit array with TARGET attribute. ! CHECK-LABEL: func @_QPtest4k( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref>> {fir.bindc_name = "a", fir.target}) { subroutine test4k(a) use type_defs type(with_kind(4)), target :: a(100) end subroutine ! ----------------------------------------------------------------------------- ! Test passing of derived type arguments that require a fir.box (runtime descriptor). ! ----------------------------------------------------------------------------- ! Test simple type assumed shape array with no attribute. ! CHECK-LABEL: func @_QPtest5( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.box>> {fir.bindc_name = "a"}) { subroutine test5(a) use type_defs type(simple_type) :: a(:) end subroutine ! Test simple type assumed shape array with TARGET attribute. ! CHECK-LABEL: func @_QPtest6( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.box>> {fir.bindc_name = "a", fir.target}) { subroutine test6(a) use type_defs type(simple_type), target :: a(:) end subroutine ! Test kind parametrized derived type assumed shape array with no attribute. ! CHECK-LABEL: func @_QPtest5k( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.box>> {fir.bindc_name = "a"}) { subroutine test5k(a) use type_defs type(with_kind(4)) :: a(:) end subroutine ! Test kind parametrized derived type assumed shape array with TARGET attribute. ! CHECK-LABEL: func @_QPtest6k( ! CHECK-SAME: %[[VAL_0:.*]]: !fir.box>> {fir.bindc_name = "a", fir.target}) { subroutine test6k(a) use type_defs type(with_kind(4)), target :: a(:) end subroutine