blob: f1792dc0c077701df466fee4a89db8854ab34233 [file] [log] [blame]
! Test generation of noinit, nofinal, and nodestroy fir.type_info attributes
! RUN: bbc -emit-hlfir %s -o - | FileCheck %s
module tyinfo
type boring_type
end type
type needs_final
contains
final :: needs_final_final
end type
type needs_init1
integer :: i =0
end type
type needs_init_and_destroy
integer, allocatable :: x
end type
type needs_all
type(needs_final) :: x
type(needs_init_and_destroy) :: y
end type
type, extends(needs_final) :: inherits_final
end type
type, extends(needs_init1) :: inherits_init
end type
type, extends(needs_init_and_destroy) :: inherits_init_and_destroy
end type
type, extends(needs_all) :: inherits_all
end type
interface
subroutine needs_final_final(x)
type(needs_final), intent(inout) :: x
end subroutine
end interface
type(boring_type) :: x1
type(needs_final) :: x2
type(needs_init1) :: x3
type(needs_init_and_destroy) :: x4
type(needs_all) :: x5
type(inherits_final) :: x6
type(inherits_init) :: x7
type(inherits_init_and_destroy) :: x8
type(inherits_all) :: x9
end module
! CHECK-DAG: fir.type_info @_QMtyinfoTboring_type noinit nodestroy nofinal : !fir.type<_QMtyinfoTboring_type>
! CHECK-DAG: fir.type_info @_QMtyinfoTneeds_final noinit : !fir.type<_QMtyinfoTneeds_final>
! CHECK-DAG: fir.type_info @_QMtyinfoTneeds_init1 nodestroy nofinal : !fir.type<_QMtyinfoTneeds_init1{i:i32}>
! CHECK-DAG: fir.type_info @_QMtyinfoTneeds_init_and_destroy nofinal : !fir.type<_QMtyinfoTneeds_init_and_destroy{x:!fir.box<!fir.heap<i32>>}>
! CHECK-DAG: fir.type_info @_QMtyinfoTneeds_all : !fir.type<_QMtyinfoTneeds_all{x:!fir.type<_QMtyinfoTneeds_final>,y:!fir.type<_QMtyinfoTneeds_init_and_destroy{x:!fir.box<!fir.heap<i32>>}>}>
! CHECK-DAG: fir.type_info @_QMtyinfoTinherits_final noinit extends !fir.type<_QMtyinfoTneeds_final> : !fir.type<_QMtyinfoTinherits_final{needs_final:!fir.type<_QMtyinfoTneeds_final>}>
! CHECK-DAG: fir.type_info @_QMtyinfoTinherits_init nodestroy nofinal extends !fir.type<_QMtyinfoTneeds_init1{i:i32}> : !fir.type<_QMtyinfoTinherits_init{needs_init1:!fir.type<_QMtyinfoTneeds_init1{i:i32}>}>
! CHECK-DAG: fir.type_info @_QMtyinfoTinherits_init_and_destroy nofinal extends !fir.type<_QMtyinfoTneeds_init_and_destroy{x:!fir.box<!fir.heap<i32>>}> : !fir.type<_QMtyinfoTinherits_init_and_destroy{needs_init_and_destroy:!fir.type<_QMtyinfoTneeds_init_and_destroy{x:!fir.box<!fir.heap<i32>>}>}>
! CHECK-DAG: fir.type_info @_QMtyinfoTinherits_all extends !fir.type<_QMtyinfoTneeds_all{x:!fir.type<_QMtyinfoTneeds_final>,y:!fir.type<_QMtyinfoTneeds_init_and_destroy{x:!fir.box<!fir.heap<i32>>}>}> : !fir.type<_QMtyinfoTinherits_all{needs_all:!fir.type<_QMtyinfoTneeds_all{x:!fir.type<_QMtyinfoTneeds_final>,y:!fir.type<_QMtyinfoTneeds_init_and_destroy{x:!fir.box<!fir.heap<i32>>}>}>}>