1! RUN: %S/test_symbols.sh %s %t %flang_fc1 2! REQUIRES: shell 3! Forward references in pointer initializers and TBP bindings. 4 5!DEF: /m Module 6module m 7 implicit none 8 abstract interface 9 !DEF: /m/iface ABSTRACT, PUBLIC (Subroutine) Subprogram 10 subroutine iface 11 end subroutine 12 end interface 13 !DEF: /m/op1 POINTER, PUBLIC ObjectEntity REAL(4) 14 real, pointer :: op1 15 !DEF: /m/op2 POINTER, PUBLIC ObjectEntity REAL(4) 16 !DEF: /m/null INTRINSIC, PUBLIC, PURE (Function) ProcEntity 17 real, pointer :: op2 => null() 18 !DEF: /m/op3 POINTER, PUBLIC ObjectEntity REAL(4) 19 !DEF: /m/x PUBLIC, TARGET ObjectEntity REAL(4) 20 real, pointer :: op3 => x 21 !DEF: /m/op4 POINTER, PUBLIC ObjectEntity REAL(4) 22 !DEF: /m/y PUBLIC, TARGET ObjectEntity REAL(4) 23 real, pointer :: op4 => y(1) 24 !REF: /m/iface 25 !DEF: /m/pp1 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity 26 procedure(iface), pointer :: pp1 27 !REF: /m/iface 28 !DEF: /m/pp2 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity 29 !REF: /m/null 30 procedure(iface), pointer :: pp2 => null() 31 !REF: /m/iface 32 !DEF: /m/pp3 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity 33 !DEF: /m/ext1 EXTERNAL, PUBLIC (Subroutine) ProcEntity 34 procedure(iface), pointer :: pp3 => ext1 35 !REF: /m/iface 36 !DEF: /m/pp4 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity 37 !DEF: /m/ext2 EXTERNAL, PUBLIC (Subroutine) Subprogram 38 procedure(iface), pointer :: pp4 => ext2 39 !REF: /m/iface 40 !DEF: /m/pp5 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity 41 !DEF: /m/ext3 EXTERNAL, PUBLIC (Subroutine) ProcEntity 42 procedure(iface), pointer :: pp5 => ext3 43 !REF: /m/iface 44 !DEF: /m/pp6 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity 45 !DEF: /m/modproc1 PUBLIC (Subroutine) Subprogram 46 procedure(iface), pointer :: pp6 => modproc1 47 !DEF: /m/t1 PUBLIC DerivedType 48 type :: t1 49 !DEF: /m/t1/opc1 POINTER ObjectEntity REAL(4) 50 real, pointer :: opc1 51 !DEF: /m/t1/opc2 POINTER ObjectEntity REAL(4) 52 !REF: /m/null 53 real, pointer :: opc2 => null() 54 !DEF: /m/t1/opc3 POINTER ObjectEntity REAL(4) 55 !REF: /m/x 56 real, pointer :: opc3 => x 57 !DEF: /m/t1/opc4 POINTER ObjectEntity REAL(4) 58 !REF: /m/y 59 real, pointer :: opc4 => y(1) 60 !REF: /m/iface 61 !DEF: /m/t1/ppc1 NOPASS, POINTER (Subroutine) ProcEntity 62 procedure(iface), nopass, pointer :: ppc1 63 !REF: /m/iface 64 !DEF: /m/t1/ppc2 NOPASS, POINTER (Subroutine) ProcEntity 65 !REF: /m/null 66 procedure(iface), nopass, pointer :: ppc2 => null() 67 !REF: /m/iface 68 !DEF: /m/t1/ppc3 NOPASS, POINTER (Subroutine) ProcEntity 69 !REF: /m/ext1 70 procedure(iface), nopass, pointer :: ppc3 => ext1 71 !REF: /m/iface 72 !DEF: /m/t1/ppc4 NOPASS, POINTER (Subroutine) ProcEntity 73 !REF: /m/ext2 74 procedure(iface), nopass, pointer :: ppc4 => ext2 75 !REF: /m/iface 76 !DEF: /m/t1/ppc5 NOPASS, POINTER (Subroutine) ProcEntity 77 !REF: /m/ext3 78 procedure(iface), nopass, pointer :: ppc5 => ext3 79 !REF: /m/iface 80 !DEF: /m/t1/ppc6 NOPASS, POINTER (Subroutine) ProcEntity 81 !REF: /m/modproc1 82 procedure(iface), nopass, pointer :: ppc6 => modproc1 83 contains 84 !DEF: /m/t1/b2 NOPASS ProcBinding 85 !REF: /m/ext2 86 procedure, nopass :: b2 => ext2 87 !DEF: /m/t1/b3 NOPASS ProcBinding 88 !REF: /m/ext3 89 procedure, nopass :: b3 => ext3 90 !DEF: /m/t1/b4 NOPASS ProcBinding 91 !REF: /m/modproc1 92 procedure, nopass :: b4 => modproc1 93 end type 94 !DEF: /m/pdt1 PUBLIC DerivedType 95 !DEF: /m/pdt1/k TypeParam INTEGER(4) 96 type :: pdt1(k) 97 !REF: /m/pdt1/k 98 integer, kind :: k 99 !DEF: /m/pdt1/opc1 POINTER ObjectEntity REAL(4) 100 real, pointer :: opc1 101 !DEF: /m/pdt1/opc2 POINTER ObjectEntity REAL(4) 102 !REF: /m/null 103 real, pointer :: opc2 => null() 104 !DEF: /m/pdt1/opc3 POINTER ObjectEntity REAL(4) 105 !REF: /m/x 106 real, pointer :: opc3 => x 107 !DEF: /m/pdt1/opc4 POINTER ObjectEntity REAL(4) 108 !REF: /m/y 109 !REF: /m/pdt1/k 110 real, pointer :: opc4 => y(k) 111 !REF: /m/iface 112 !DEF: /m/pdt1/ppc1 NOPASS, POINTER (Subroutine) ProcEntity 113 procedure(iface), nopass, pointer :: ppc1 114 !REF: /m/iface 115 !DEF: /m/pdt1/ppc2 NOPASS, POINTER (Subroutine) ProcEntity 116 !REF: /m/null 117 procedure(iface), nopass, pointer :: ppc2 => null() 118 !REF: /m/iface 119 !DEF: /m/pdt1/ppc3 NOPASS, POINTER (Subroutine) ProcEntity 120 !REF: /m/ext1 121 procedure(iface), nopass, pointer :: ppc3 => ext1 122 !REF: /m/iface 123 !DEF: /m/pdt1/ppc4 NOPASS, POINTER (Subroutine) ProcEntity 124 !REF: /m/ext2 125 procedure(iface), nopass, pointer :: ppc4 => ext2 126 !REF: /m/iface 127 !DEF: /m/pdt1/ppc5 NOPASS, POINTER (Subroutine) ProcEntity 128 !REF: /m/ext3 129 procedure(iface), nopass, pointer :: ppc5 => ext3 130 !REF: /m/iface 131 !DEF: /m/pdt1/ppc6 NOPASS, POINTER (Subroutine) ProcEntity 132 !REF: /m/modproc1 133 procedure(iface), nopass, pointer :: ppc6 => modproc1 134 contains 135 !DEF: /m/pdt1/b2 NOPASS ProcBinding 136 !REF: /m/ext2 137 procedure, nopass :: b2 => ext2 138 !DEF: /m/pdt1/b3 NOPASS ProcBinding 139 !REF: /m/ext3 140 procedure, nopass :: b3 => ext3 141 !DEF: /m/pdt1/b4 NOPASS ProcBinding 142 !REF: /m/modproc1 143 procedure, nopass :: b4 => modproc1 144 end type 145 !REF: /m/t1 146 !DEF: /m/t1x PUBLIC ObjectEntity TYPE(t1) 147 type(t1) :: t1x 148 !REF: /m/pdt1 149 !DEF: /m/pdt1x PUBLIC ObjectEntity TYPE(pdt1(k=1_4)) 150 type(pdt1(1)) :: pdt1x 151 !REF: /m/x 152 !REF: /m/y 153 real, target :: x, y(2) 154 !REF: /m/ext1 155 external :: ext1 156 !REF: /m/iface 157 !REF: /m/ext3 158 procedure(iface) :: ext3 159 interface 160 !REF: /m/ext2 161 subroutine ext2 162 end subroutine 163 end interface 164 !DEF: /m/op10 POINTER, PUBLIC ObjectEntity REAL(4) 165 !REF: /m/x 166 real, pointer :: op10 => x 167 !DEF: /m/op11 POINTER, PUBLIC ObjectEntity REAL(4) 168 !REF: /m/y 169 real, pointer :: op11 => y(1) 170 !REF: /m/iface 171 !DEF: /m/pp10 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity 172 !REF: /m/ext1 173 procedure(iface), pointer :: pp10 => ext1 174 !REF: /m/iface 175 !DEF: /m/pp11 EXTERNAL, POINTER, PUBLIC (Subroutine) ProcEntity 176 !REF: /m/ext2 177 procedure(iface), pointer :: pp11 => ext2 178 !DEF: /m/t2 PUBLIC DerivedType 179 type :: t2 180 !DEF: /m/t2/opc10 POINTER ObjectEntity REAL(4) 181 !REF: /m/x 182 real, pointer :: opc10 => x 183 !DEF: /m/t2/opc11 POINTER ObjectEntity REAL(4) 184 !REF: /m/y 185 real, pointer :: opc11 => y(1) 186 !REF: /m/iface 187 !DEF: /m/t2/ppc10 NOPASS, POINTER (Subroutine) ProcEntity 188 !REF: /m/ext1 189 procedure(iface), nopass, pointer :: ppc10 => ext1 190 !REF: /m/iface 191 !DEF: /m/t2/ppc11 NOPASS, POINTER (Subroutine) ProcEntity 192 !REF: /m/ext2 193 procedure(iface), nopass, pointer :: ppc11 => ext2 194 contains 195 !DEF: /m/t2/b10 NOPASS ProcBinding 196 !REF: /m/ext2 197 procedure, nopass :: b10 => ext2 198 !DEF: /m/t2/b11 NOPASS ProcBinding 199 !REF: /m/ext3 200 procedure, nopass :: b11 => ext3 201 end type 202 !DEF: /m/pdt2 PUBLIC DerivedType 203 !DEF: /m/pdt2/k TypeParam INTEGER(4) 204 type :: pdt2(k) 205 !REF: /m/pdt2/k 206 integer, kind :: k 207 !DEF: /m/pdt2/opc10 POINTER ObjectEntity REAL(4) 208 !REF: /m/x 209 real, pointer :: opc10 => x 210 !DEF: /m/pdt2/opc11 POINTER ObjectEntity REAL(4) 211 !REF: /m/y 212 !REF: /m/pdt2/k 213 real, pointer :: opc11 => y(k) 214 !REF: /m/iface 215 !DEF: /m/pdt2/ppc10 NOPASS, POINTER (Subroutine) ProcEntity 216 !REF: /m/ext1 217 procedure(iface), nopass, pointer :: ppc10 => ext1 218 !REF: /m/iface 219 !DEF: /m/pdt2/ppc11 NOPASS, POINTER (Subroutine) ProcEntity 220 !REF: /m/ext2 221 procedure(iface), nopass, pointer :: ppc11 => ext2 222 contains 223 !DEF: /m/pdt2/b10 NOPASS ProcBinding 224 !REF: /m/ext2 225 procedure, nopass :: b10 => ext2 226 !DEF: /m/pdt2/b11 NOPASS ProcBinding 227 !REF: /m/ext3 228 procedure, nopass :: b11 => ext3 229 end type 230 !REF: /m/t2 231 !DEF: /m/t2x PUBLIC ObjectEntity TYPE(t2) 232 type(t2) :: t2x 233 !REF: /m/pdt2 234 !DEF: /m/pdt2x PUBLIC ObjectEntity TYPE(pdt2(k=1_4)) 235 type(pdt2(1)) :: pdt2x 236contains 237 !REF: /m/modproc1 238 subroutine modproc1 239 end subroutine 240end module 241!DEF: /ext1 (Subroutine) Subprogram 242subroutine ext1 243end subroutine 244!DEF: /ext2 (Subroutine) Subprogram 245subroutine ext2 246end subroutine 247!DEF: /ext3 (Subroutine) Subprogram 248subroutine ext3 249end subroutine 250!DEF: /main MainProgram 251program main 252 !REF: /m 253 use :: m 254 !DEF: /main/pdt1 Use 255 !DEF: /main/pdt1y ObjectEntity TYPE(pdt1(k=2_4)) 256 type(pdt1(2)) :: pdt1y 257 !DEF: /main/pdt2 Use 258 !DEF: /main/pdt2y ObjectEntity TYPE(pdt2(k=2_4)) 259 type(pdt2(2)) :: pdt2y 260 print *, "compiled" 261end program 262