! RUN: bbc -emit-fir %s -o - | FileCheck %s
! Tests the generation of fir.type_info operations.
module polymorphic_types
type p1
integer :: a
integer :: b
contains
procedure :: proc1 => proc1_p1
procedure :: aproc
procedure :: zproc
end type
type, extends(p1) :: p2
integer :: c
contains
procedure :: proc1 => proc1_p2
procedure :: aproc2
end type
type, extends(p2) :: p3
integer :: d
contains
procedure :: aproc3
end type
contains
subroutine proc1_p1(p)
class(p1) :: p
end subroutine
subroutine aproc(p)
class(p1) :: p
end subroutine
subroutine zproc(p)
class(p1) :: p
end subroutine
subroutine proc1_p2(p)
class(p2) :: p
end subroutine
subroutine aproc2(p)
class(p2) :: p
end subroutine
subroutine aproc3(p)
class(p3) :: p
end subroutine
end module
! CHECK-LABEL: fir.type_info @_QMpolymorphic_typesTp1
! CHECK: fir.dt_entry "aproc", @_QMpolymorphic_typesPaproc
! CHECK: fir.dt_entry "proc1", @_QMpolymorphic_typesPproc1_p1
! CHECK: fir.dt_entry "zproc", @_QMpolymorphic_typesPzproc
! CHECK: }
! CHECK-LABEL: fir.type_info @_QMpolymorphic_typesTp2 {{.*}}extends !fir.type<_QMpolymorphic_typesTp1{{.*}}>
! CHECK: fir.dt_entry "aproc", @_QMpolymorphic_typesPaproc
! CHECK: fir.dt_entry "proc1", @_QMpolymorphic_typesPproc1_p2
! CHECK: fir.dt_entry "zproc", @_QMpolymorphic_typesPzproc
! CHECK: fir.dt_entry "aproc2", @_QMpolymorphic_typesPaproc2
! CHECK: }
! CHECK-LABEL: fir.type_info @_QMpolymorphic_typesTp3 {{.*}}extends !fir.type<_QMpolymorphic_typesTp2{{.*}}>
! CHECK: fir.dt_entry "aproc", @_QMpolymorphic_typesPaproc
! CHECK: fir.dt_entry "proc1", @_QMpolymorphic_typesPproc1_p2
! CHECK: fir.dt_entry "zproc", @_QMpolymorphic_typesPzproc
! CHECK: fir.dt_entry "aproc2", @_QMpolymorphic_typesPaproc2
! CHECK: fir.dt_entry "aproc3", @_QMpolymorphic_typesPaproc3
! CHECK: }