264 lines · plain
1! RUN: %python %S/test_symbols.py %s %flang_fc12! Forward references in pointer initializers and TBP bindings.3 4!DEF: /m Module5module m6 implicit none7 abstract interface8 !DEF: /m/iface ABSTRACT, PUBLIC (Subroutine) Subprogram9 subroutine iface10 end subroutine11 end interface12 !DEF: /m/op1 POINTER, PUBLIC ObjectEntity REAL(4)13 real, pointer :: op114 !DEF: /m/op2 POINTER, PUBLIC ObjectEntity REAL(4)15 !DEF: /m/null INTRINSIC, PUBLIC, PURE (Function) ProcEntity16 real, pointer :: op2 => null()17 !DEF: /m/op3 POINTER, PUBLIC ObjectEntity REAL(4)18 !DEF: /m/x PUBLIC, TARGET ObjectEntity REAL(4)19 real, pointer :: op3 => x20 !DEF: /m/op4 POINTER, PUBLIC ObjectEntity REAL(4)21 !DEF: /m/y PUBLIC, TARGET ObjectEntity REAL(4)22 real, pointer :: op4 => y(1)23 !REF: /m/iface24 !DEF: /m/pp1 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity25 procedure(iface), pointer :: pp126 !REF: /m/iface27 !DEF: /m/pp2 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity28 !REF: /m/null29 procedure(iface), pointer :: pp2 => null()30 !REF: /m/iface31 !DEF: /m/pp3 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity32 !DEF: /m/ext1 EXTERNAL, PUBLIC (Subroutine) ProcEntity33 procedure(iface), pointer :: pp3 => ext134 !REF: /m/iface35 !DEF: /m/pp4 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity36 !DEF: /m/ext2 EXTERNAL, PUBLIC (Subroutine) Subprogram37 procedure(iface), pointer :: pp4 => ext238 !REF: /m/iface39 !DEF: /m/pp5 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity40 !DEF: /m/ext3 EXTERNAL, PUBLIC (Subroutine) ProcEntity41 procedure(iface), pointer :: pp5 => ext342 !REF: /m/iface43 !DEF: /m/pp6 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity44 !DEF: /m/modproc1 PUBLIC (Subroutine) Subprogram45 procedure(iface), pointer :: pp6 => modproc146 !DEF: /m/xx PUBLIC, TARGET ObjectEntity REAL(4)47 !DEF: /m/yy PUBLIC, TARGET ObjectEntity REAL(4)48 real, target :: xx, yy(2)49 !DEF: /m/t1 PUBLIC DerivedType50 type :: t151 !DEF: /m/t1/opc1 POINTER ObjectEntity REAL(4)52 real, pointer :: opc153 !DEF: /m/t1/opc2 POINTER ObjectEntity REAL(4)54 !REF: /m/null55 real, pointer :: opc2 => null()56 !DEF: /m/t1/opc3 POINTER ObjectEntity REAL(4)57 !REF: /m/xx58 real, pointer :: opc3 => xx59 !DEF: /m/t1/opc4 POINTER ObjectEntity REAL(4)60 !REF: /m/yy61 real, pointer :: opc4 => yy(1)62 !REF: /m/iface63 !DEF: /m/t1/ppc1 NOPASS, POINTER (Subroutine) ProcEntity64 procedure(iface), nopass, pointer :: ppc165 !REF: /m/iface66 !DEF: /m/t1/ppc2 NOPASS, POINTER (Subroutine) ProcEntity67 !REF: /m/null68 procedure(iface), nopass, pointer :: ppc2 => null()69 !REF: /m/iface70 !DEF: /m/t1/ppc3 NOPASS, POINTER (Subroutine) ProcEntity71 !REF: /m/ext172 procedure(iface), nopass, pointer :: ppc3 => ext173 !REF: /m/iface74 !DEF: /m/t1/ppc4 NOPASS, POINTER (Subroutine) ProcEntity75 !REF: /m/ext276 procedure(iface), nopass, pointer :: ppc4 => ext277 !REF: /m/iface78 !DEF: /m/t1/ppc5 NOPASS, POINTER (Subroutine) ProcEntity79 !REF: /m/ext380 procedure(iface), nopass, pointer :: ppc5 => ext381 !REF: /m/iface82 !DEF: /m/t1/ppc6 NOPASS, POINTER (Subroutine) ProcEntity83 !REF: /m/modproc184 procedure(iface), nopass, pointer :: ppc6 => modproc185 contains86 !DEF: /m/t1/b2 NOPASS ProcBinding87 !REF: /m/ext288 procedure, nopass :: b2 => ext289 !DEF: /m/t1/b3 NOPASS ProcBinding90 !REF: /m/ext391 procedure, nopass :: b3 => ext392 !DEF: /m/t1/b4 NOPASS ProcBinding93 !REF: /m/modproc194 procedure, nopass :: b4 => modproc195 end type96 !DEF: /m/pdt1 PUBLIC DerivedType97 !DEF: /m/pdt1/k TypeParam INTEGER(4)98 type :: pdt1(k)99 !REF: /m/pdt1/k100 integer, kind :: k101 !DEF: /m/pdt1/opc1 POINTER ObjectEntity REAL(4)102 real, pointer :: opc1103 !DEF: /m/pdt1/opc2 POINTER ObjectEntity REAL(4)104 !REF: /m/null105 real, pointer :: opc2 => null()106 !DEF: /m/pdt1/opc3 POINTER ObjectEntity REAL(4)107 !REF: /m/xx108 real, pointer :: opc3 => xx109 !DEF: /m/pdt1/opc4 POINTER ObjectEntity REAL(4)110 !REF: /m/yy111 !REF: /m/pdt1/k112 real, pointer :: opc4 => yy(k)113 !REF: /m/iface114 !DEF: /m/pdt1/ppc1 NOPASS, POINTER (Subroutine) ProcEntity115 procedure(iface), nopass, pointer :: ppc1116 !REF: /m/iface117 !DEF: /m/pdt1/ppc2 NOPASS, POINTER (Subroutine) ProcEntity118 !REF: /m/null119 procedure(iface), nopass, pointer :: ppc2 => null()120 !REF: /m/iface121 !DEF: /m/pdt1/ppc3 NOPASS, POINTER (Subroutine) ProcEntity122 !REF: /m/ext1123 procedure(iface), nopass, pointer :: ppc3 => ext1124 !REF: /m/iface125 !DEF: /m/pdt1/ppc4 NOPASS, POINTER (Subroutine) ProcEntity126 !REF: /m/ext2127 procedure(iface), nopass, pointer :: ppc4 => ext2128 !REF: /m/iface129 !DEF: /m/pdt1/ppc5 NOPASS, POINTER (Subroutine) ProcEntity130 !REF: /m/ext3131 procedure(iface), nopass, pointer :: ppc5 => ext3132 !REF: /m/iface133 !DEF: /m/pdt1/ppc6 NOPASS, POINTER (Subroutine) ProcEntity134 !REF: /m/modproc1135 procedure(iface), nopass, pointer :: ppc6 => modproc1136 contains137 !DEF: /m/pdt1/b2 NOPASS ProcBinding138 !REF: /m/ext2139 procedure, nopass :: b2 => ext2140 !DEF: /m/pdt1/b3 NOPASS ProcBinding141 !REF: /m/ext3142 procedure, nopass :: b3 => ext3143 !DEF: /m/pdt1/b4 NOPASS ProcBinding144 !REF: /m/modproc1145 procedure, nopass :: b4 => modproc1146 end type147 !REF: /m/t1148 !DEF: /m/t1x PUBLIC ObjectEntity TYPE(t1)149 type(t1) :: t1x150 !REF: /m/pdt1151 !DEF: /m/pdt1x PUBLIC ObjectEntity TYPE(pdt1(k=1_4))152 type(pdt1(1)) :: pdt1x153 !REF: /m/x154 !REF: /m/y155 real, target :: x, y(2)156 !REF: /m/ext1157 external :: ext1158 !REF: /m/iface159 !REF: /m/ext3160 procedure(iface) :: ext3161 interface162 !REF: /m/ext2163 subroutine ext2164 end subroutine165 end interface166 !DEF: /m/op10 POINTER, PUBLIC ObjectEntity REAL(4)167 !REF: /m/x168 real, pointer :: op10 => x169 !DEF: /m/op11 POINTER, PUBLIC ObjectEntity REAL(4)170 !REF: /m/y171 real, pointer :: op11 => y(1)172 !REF: /m/iface173 !DEF: /m/pp10 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity174 !REF: /m/ext1175 procedure(iface), pointer :: pp10 => ext1176 !REF: /m/iface177 !DEF: /m/pp11 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity178 !REF: /m/ext2179 procedure(iface), pointer :: pp11 => ext2180 !DEF: /m/t2 PUBLIC DerivedType181 type :: t2182 !DEF: /m/t2/opc10 POINTER ObjectEntity REAL(4)183 !REF: /m/x184 real, pointer :: opc10 => x185 !DEF: /m/t2/opc11 POINTER ObjectEntity REAL(4)186 !REF: /m/y187 real, pointer :: opc11 => y(1)188 !REF: /m/iface189 !DEF: /m/t2/ppc10 NOPASS, POINTER (Subroutine) ProcEntity190 !REF: /m/ext1191 procedure(iface), nopass, pointer :: ppc10 => ext1192 !REF: /m/iface193 !DEF: /m/t2/ppc11 NOPASS, POINTER (Subroutine) ProcEntity194 !REF: /m/ext2195 procedure(iface), nopass, pointer :: ppc11 => ext2196 contains197 !DEF: /m/t2/b10 NOPASS ProcBinding198 !REF: /m/ext2199 procedure, nopass :: b10 => ext2200 !DEF: /m/t2/b11 NOPASS ProcBinding201 !REF: /m/ext3202 procedure, nopass :: b11 => ext3203 end type204 !DEF: /m/pdt2 PUBLIC DerivedType205 !DEF: /m/pdt2/k TypeParam INTEGER(4)206 type :: pdt2(k)207 !REF: /m/pdt2/k208 integer, kind :: k209 !DEF: /m/pdt2/opc10 POINTER ObjectEntity REAL(4)210 !REF: /m/x211 real, pointer :: opc10 => x212 !DEF: /m/pdt2/opc11 POINTER ObjectEntity REAL(4)213 !REF: /m/y214 !REF: /m/pdt2/k215 real, pointer :: opc11 => y(k)216 !REF: /m/iface217 !DEF: /m/pdt2/ppc10 NOPASS, POINTER (Subroutine) ProcEntity218 !REF: /m/ext1219 procedure(iface), nopass, pointer :: ppc10 => ext1220 !REF: /m/iface221 !DEF: /m/pdt2/ppc11 NOPASS, POINTER (Subroutine) ProcEntity222 !REF: /m/ext2223 procedure(iface), nopass, pointer :: ppc11 => ext2224 contains225 !DEF: /m/pdt2/b10 NOPASS ProcBinding226 !REF: /m/ext2227 procedure, nopass :: b10 => ext2228 !DEF: /m/pdt2/b11 NOPASS ProcBinding229 !REF: /m/ext3230 procedure, nopass :: b11 => ext3231 end type232 !REF: /m/t2233 !DEF: /m/t2x PUBLIC ObjectEntity TYPE(t2)234 type(t2) :: t2x235 !REF: /m/pdt2236 !DEF: /m/pdt2x PUBLIC ObjectEntity TYPE(pdt2(k=1_4))237 type(pdt2(1)) :: pdt2x238contains239 !REF: /m/modproc1240 subroutine modproc1241 end subroutine242end module243!DEF: /ext1 (Subroutine) Subprogram244subroutine ext1245end subroutine246!DEF: /ext2 (Subroutine) Subprogram247subroutine ext2248end subroutine249!DEF: /ext3 (Subroutine) Subprogram250subroutine ext3251end subroutine252!DEF: /MAIN MainProgram253program MAIN254 !REF: /m255 use :: m256 !DEF: /MAIN/pdt1 Use257 !DEF: /MAIN/pdt1y ObjectEntity TYPE(pdt1(k=2_4))258 type(pdt1(2)) :: pdt1y259 !DEF: /MAIN/pdt2 Use260 !DEF: /MAIN/pdt2y ObjectEntity TYPE(pdt2(k=2_4))261 type(pdt2(2)) :: pdt2y262 print *, "compiled"263end program264