! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s
module extends_type_of_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_extended_type(a, b)
class(*) :: a
class(*) :: b
if (extends_type_of(a, b)) then
print*, 'extends_type_of ok'
else
print*, 'extends_type_of failed'
end if
end subroutine
! CHECK-LABEL: func.func @_QMextends_type_of_modPis_extended_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 @_FortranAExtendsTypeOf(%[[BOX0]], %[[BOX1]]) {{.*}} : (!fir.box<none>, !fir.box<none>) -> i1
end module
program test
use extends_type_of_mod
type(p1) :: p, r
type(p2) :: q
type(k1(10)) :: k10
type(k1(20)) :: k20
call is_extended_type(p, p)
call is_extended_type(p, q)
call is_extended_type(p, r)
call is_extended_type(q, p)
call is_extended_type(k10, k20)
end