! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
module same_type_as_mod
type p1
integer :: a
end type
type, extends(p1) :: p2
integer :: b
end type
type k1(a)
integer, kind :: a
end type
contains
subroutine is_same_type(a, b)
class(*) :: a
class(*) :: b
if (same_type_as(a, b)) then
print*, 'same_type_as ok'
else
print*, 'same_type_as failed'
end if
end subroutine
! CHECK-LABEL: func.func @_QMsame_type_as_modPis_same_type(
! CHECK-SAME: %[[ARG0:.*]]: !fir.class<none> {fir.bindc_name = "a"}, %[[ARG1:.*]]: !fir.class<none> {fir.bindc_name = "b"}) {
! CHECK: %[[BOX0:.*]] = fir.convert %[[ARG0]] : (!fir.class<none>) -> !fir.box<none>
! CHECK: %[[BOX1:.*]] = fir.convert %[[ARG1]] : (!fir.class<none>) -> !fir.box<none>
! CHECK: %{{.*}} = fir.call @_FortranASameTypeAs(%[[BOX0]], %[[BOX1]]) {{.*}} : (!fir.box<none>, !fir.box<none>) -> i1
end module
program test
use same_type_as_mod
type(p1) :: p, r
type(p2) :: q
type(k1(10)) :: k10
type(k1(20)) :: k20
call is_same_type(p, q)
call is_same_type(p, r)
call is_same_type(k10, k20)
end