blob: 55093e1670995d635a8022b2859d8df60b03177e [file] [log] [blame]
! 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.type<_QMtype_defsTsimple_type{i:i32}>> {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.array<100x!fir.type<_QMtype_defsTsimple_type{i:i32}>>> {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.type<_QMtype_defsTsimple_type{i:i32}>> {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.array<100x!fir.type<_QMtype_defsTsimple_type{i:i32}>>> {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.type<_QMtype_defsTwith_kindK4{x:f32}>> {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.array<100x!fir.type<_QMtype_defsTwith_kindK4{x:f32}>>> {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.type<_QMtype_defsTwith_kindK4{x:f32}>> {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.array<100x!fir.type<_QMtype_defsTwith_kindK4{x:f32}>>> {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.array<?x!fir.type<_QMtype_defsTsimple_type{i:i32}>>> {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.array<?x!fir.type<_QMtype_defsTsimple_type{i:i32}>>> {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.array<?x!fir.type<_QMtype_defsTwith_kindK4{x:f32}>>> {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.array<?x!fir.type<_QMtype_defsTwith_kindK4{x:f32}>>> {fir.bindc_name = "a", fir.target}) {
subroutine test6k(a)
use type_defs
type(with_kind(4)), target :: a(:)
end subroutine