mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 15:56:40 +00:00

Polymorphic entity lowering status is good. The main remaining TODO is to allow lowering of vector subscripted polymorphic entity, but this does not deserve blocking all application using polymorphism. Remove experimental option and enable lowering of polymorphic entity by default.
76 lines
2.0 KiB
Fortran
76 lines
2.0 KiB
Fortran
! 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: }
|