141 lines · plain
1! RUN: %python %S/test_symbols.py %s %flang_fc12! Forward references to derived types (non-error cases)3 4!DEF: /MAIN MainProgram5program MAIN6 !DEF: /MAIN/t1 DerivedType7 type :: t18 !DEF: /MAIN/t2 DerivedType9 !DEF: /MAIN/t1/t1a ALLOCATABLE ObjectEntity TYPE(t2)10 type(t2), allocatable :: t1a11 !REF: /MAIN/t212 !DEF: /MAIN/t1/t1p POINTER ObjectEntity TYPE(t2)13 type(t2), pointer :: t1p14 end type15 !REF: /MAIN/t216 type :: t217 !REF: /MAIN/t218 !DEF: /MAIN/t2/t2a ALLOCATABLE ObjectEntity TYPE(t2)19 type(t2), allocatable :: t2a20 !REF: /MAIN/t221 !DEF: /MAIN/t2/t2p POINTER ObjectEntity TYPE(t2)22 type(t2), pointer :: t2p23 end type24 !REF: /MAIN/t125 !DEF: /MAIN/t1x TARGET ObjectEntity TYPE(t1)26 type(t1), target :: t1x27 !REF: /MAIN/t1x28 !REF: /MAIN/t1/t1a29 allocate(t1x%t1a)30 !REF: /MAIN/t1x31 !REF: /MAIN/t1/t1p32 !REF: /MAIN/t1/t1a33 t1x%t1p => t1x%t1a34 !REF: /MAIN/t1x35 !REF: /MAIN/t1/t1a36 !REF: /MAIN/t2/t2a37 allocate(t1x%t1a%t2a)38 !REF: /MAIN/t1x39 !REF: /MAIN/t1/t1a40 !REF: /MAIN/t2/t2p41 !REF: /MAIN/t2/t2a42 t1x%t1a%t2p => t1x%t1a%t2a43end program44!DEF: /f1/fwd DerivedType45!DEF: /f1 (Function) Subprogram TYPE(fwd)46!DEF: /f1/n (Implicit) ObjectEntity INTEGER(4)47type(fwd) function f1(n)48 !REF: /f1/fwd49 type :: fwd50 !DEF: /f1/fwd/n ObjectEntity INTEGER(4)51 integer :: n52 end type53 !DEF: /f1/f1 ObjectEntity TYPE(fwd)54 !REF: /f1/fwd/n55 !REF: /f1/n56 f1%n = n57end function58!DEF: /s1 (Subroutine) Subprogram59!DEF: /s1/q1 (Implicit) ObjectEntity TYPE(fwd)60subroutine s1 (q1)61 !DEF: /s1/fwd DerivedType62 implicit type(fwd)(q)63 !REF: /s1/fwd64 type :: fwd65 !DEF: /s1/fwd/n ObjectEntity INTEGER(4)66 integer :: n67 end type68 !REF: /s1/q169 !REF: /s1/fwd/n70 q1%n = 171end subroutine72!DEF: /f2/fwdpdt DerivedType73!DEF: /f2/kind INTRINSIC, PURE (Function) ProcEntity74!DEF: /f2 (Function) Subprogram TYPE(fwdpdt(k=4_4))75!DEF: /f2/n (Implicit) ObjectEntity INTEGER(4)76type(fwdpdt(kind(0))) function f2(n)77 !REF: /f2/fwdpdt78 !DEF: /f2/fwdpdt/k TypeParam INTEGER(4)79 type :: fwdpdt(k)80 !REF: /f2/fwdpdt/k81 integer, kind :: k82 !DEF: /f2/DerivedType2/k TypeParam INTEGER(4)83 !DEF: /f2/fwdpdt/n ObjectEntity INTEGER(int(int(k,kind=4),kind=8))84 integer(kind=k) :: n85 end type86 !DEF: /f2/f2 ObjectEntity TYPE(fwdpdt(k=4_4))87 !DEF: /f2/DerivedType2/n ObjectEntity INTEGER(4)88 !REF: /f2/n89 f2%n = n90end function91!DEF: /s2 (Subroutine) Subprogram92!DEF: /s2/q1 (Implicit) ObjectEntity TYPE(fwdpdt(k=4_4))93subroutine s2 (q1)94 !DEF: /s2/fwdpdt DerivedType95 !DEF: /s2/kind INTRINSIC, PURE (Function) ProcEntity96 implicit type(fwdpdt(kind(0)))(q)97 !REF: /s2/fwdpdt98 !DEF: /s2/fwdpdt/k TypeParam INTEGER(4)99 type :: fwdpdt(k)100 !REF: /s2/fwdpdt/k101 integer, kind :: k102 !DEF: /s2/DerivedType2/k TypeParam INTEGER(4)103 !DEF: /s2/fwdpdt/n ObjectEntity INTEGER(int(int(k,kind=4),kind=8))104 integer(kind=k) :: n105 end type106 !REF: /s2/q1107 !DEF: /s2/DerivedType2/n ObjectEntity INTEGER(4)108 q1%n = 1109end subroutine110!DEF: /m1 Module111module m1112 !DEF: /m1/forward PRIVATE DerivedType113 private :: forward114 !DEF: /m1/base PUBLIC DerivedType115 type :: base116 !REF: /m1/forward117 !DEF: /m1/base/p POINTER ObjectEntity CLASS(forward)118 class(forward), pointer :: p119 end type120 !REF: /m1/base121 !REF: /m1/forward122 type, extends(base) :: forward123 !DEF: /m1/forward/n ObjectEntity INTEGER(4)124 integer :: n125 end type126contains127 !DEF: /m1/test PUBLIC (Subroutine) Subprogram128 subroutine test129 !REF: /m1/forward130 !DEF: /m1/test/object TARGET ObjectEntity TYPE(forward)131 type(forward), target :: object132 !REF: /m1/test/object133 !REF: /m1/base/p134 object%p => object135 !REF: /m1/test/object136 !REF: /m1/base/p137 !REF: /m1/forward/n138 object%p%n = 666139 end subroutine140end module141