xref: /llvm-project/flang/test/Lower/HLFIR/type-info-components.f90 (revision 66d5ca2a3d8df780951ce2987157ef03e73393c7)
1! Test generation of fir.dt_component
2! RUN: bbc -emit-hlfir %s -o - | FileCheck %s
3subroutine test_1(x)
4  integer, save, target :: my_target
5  procedure() :: my_proc
6  type :: sometype
7    integer :: i(-1:8) = 42
8    integer :: j(1:8)
9    integer, allocatable :: alloc(:)
10    integer, pointer :: p => my_target
11    integer, pointer :: p2 => NULL()
12    integer, pointer :: p3
13    procedure(), pointer, nopass :: proc_p => my_proc
14    procedure(), pointer, nopass :: proc_p2 => NULL()
15    procedure(), pointer, nopass :: proc_p3
16  end type
17  type(sometype) :: x
18end subroutine
19! CHECK-LABEL:   fir.type_info @_QFtest_1Tsometype
20! CHECK-SAME     component_info {
21! CHECK:           fir.dt_component "i" lbs [-1] init @_QFtest_1E.di.sometype.i
22! CHECK-NOT:       fir.dt_component "j"
23! CHECK:           fir.dt_component "p" init @_QFtest_1E.di.sometype.p
24! CHECK:           fir.dt_component "p2" init @_QFtest_1E.di.sometype.p2
25! CHECK:           fir.dt_component "proc_p" init @_QPmy_proc
26! CHECK:         }
27
28subroutine test_nesting(x)
29  type some_sub_type
30    integer :: i = 42
31  end type
32  type sometype2
33    type(some_sub_type) :: nested
34  end type
35  type(sometype2) :: x
36end subroutine
37! CHECK-LABEL:   fir.type_info @_QFtest_nestingTsome_sub_type
38! CHECK-SAME     component_info {
39! CHECK:           fir.dt_component "i" init @_QFtest_nestingE.di.some_sub_type.i
40! CHECK:         }
41
42! CHECK:         fir.type_info @_QFtest_nestingTsometype2
43! CHECK-NOT:       fir.dt_component
44
45
46subroutine data_like(x)
47  type sometype3
48    integer :: i/42/
49  end type
50  type(sometype3) :: x
51end subroutine
52! CHECK-LABEL:   fir.type_info @_QFdata_likeTsometype3
53! CHECK-SAME     component_info {
54! CHECK:           fir.dt_component "i" init @_QFdata_likeE.di.sometype3.i
55! CHECK:         }
56