! 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>}> ! 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>}>}> ! 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.type<_QMtyinfoTinherits_init_and_destroy{needs_init_and_destroy:!fir.type<_QMtyinfoTneeds_init_and_destroy{x:!fir.box>}>}> ! 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.type<_QMtyinfoTinherits_all{needs_all:!fir.type<_QMtyinfoTneeds_all{x:!fir.type<_QMtyinfoTneeds_final>,y:!fir.type<_QMtyinfoTneeds_init_and_destroy{x:!fir.box>}>}>}>