1! Test generation of noinit, nofinal, and nodestroy fir.type_info attributes 2! RUN: bbc -emit-hlfir %s -o - | FileCheck %s 3 4module tyinfo 5 type boring_type 6 end type 7 8 type needs_final 9 contains 10 final :: needs_final_final 11 end type 12 13 type needs_init1 14 integer :: i =0 15 end type 16 17 type needs_init_and_destroy 18 integer, allocatable :: x 19 end type 20 21 type needs_all 22 type(needs_final) :: x 23 type(needs_init_and_destroy) :: y 24 end type 25 26 type, extends(needs_final) :: inherits_final 27 end type 28 type, extends(needs_init1) :: inherits_init 29 end type 30 type, extends(needs_init_and_destroy) :: inherits_init_and_destroy 31 end type 32 type, extends(needs_all) :: inherits_all 33 end type 34 35 interface 36 subroutine needs_final_final(x) 37 type(needs_final), intent(inout) :: x 38 end subroutine 39 end interface 40 41 type(boring_type) :: x1 42 type(needs_final) :: x2 43 type(needs_init1) :: x3 44 type(needs_init_and_destroy) :: x4 45 type(needs_all) :: x5 46 type(inherits_final) :: x6 47 type(inherits_init) :: x7 48 type(inherits_init_and_destroy) :: x8 49 type(inherits_all) :: x9 50end module 51 52! CHECK-DAG: fir.type_info @_QMtyinfoTboring_type noinit nodestroy nofinal : !fir.type<_QMtyinfoTboring_type> 53! CHECK-DAG: fir.type_info @_QMtyinfoTneeds_final noinit : !fir.type<_QMtyinfoTneeds_final> 54! CHECK-DAG: fir.type_info @_QMtyinfoTneeds_init1 nodestroy nofinal : !fir.type<_QMtyinfoTneeds_init1{i:i32}> 55! CHECK-DAG: fir.type_info @_QMtyinfoTneeds_init_and_destroy nofinal : !fir.type<_QMtyinfoTneeds_init_and_destroy{x:!fir.box<!fir.heap<i32>>}> 56! 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>>}>}> 57! CHECK-DAG: fir.type_info @_QMtyinfoTinherits_final noinit extends !fir.type<_QMtyinfoTneeds_final> : !fir.type<_QMtyinfoTinherits_final{needs_final:!fir.type<_QMtyinfoTneeds_final>}> 58! 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}>}> 59! 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>>}>}> 60! 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>>}>}>}> 61