262 lines · plain
1! RUN: %flang_fc1 -fdebug-dump-symbols %s 2>&1 | FileCheck %s2module ma3 type a4 contains5 procedure, private, nopass :: tbp => sub_a6 generic :: gen => tbp7 end type8 type, extends(a) :: aa9 contains10 procedure, private, nopass :: tbp => sub_aa11 end type12 type, extends(aa) :: aaa13 contains14 procedure, public, nopass :: tbp => sub_aaa15 end type16 contains17 subroutine sub_a(w)18 character*(*), intent(in) :: w19 print *, w, ' -> a'20 end21 subroutine sub_aa(w)22 character*(*), intent(in) :: w23 print *, w, ' -> aa'24 end25 subroutine sub_aaa(w)26 character*(*), intent(in) :: w27 print *, w, ' -> aaa'28 end29 subroutine mono130 type(a) :: xa31 type(aa) :: xaa32 call xa%tbp('type(a) tbp')33 call xaa%tbp('type(aa) tbp')34 end35 subroutine pa(x, w)36 class(a), intent(in) :: x37 character*(*), intent(in) :: w38 call x%tbp('class(a) ' // w // ' tbp')39 call x%gen('class(a) ' // w // ' gen')40 end41 subroutine pta142 call pa(a(), 'a')43 call pa(aa(), 'aa')44 end45 subroutine paa(x, w)46 class(aa), intent(in) :: x47 character*(*), intent(in) :: w48 call x%tbp('class(aa) ' // w // ' tbp')49 call x%gen('class(aa) ' // w // ' gen')50 end51 subroutine ptaa152 call paa(aa(), 'aa')53 end54 subroutine paaa(x, w)55 class(aaa), intent(in) :: x56 character*(*), intent(in) :: w57 call x%tbp('class(aaa) ' // w // ' tbp')58 call x%gen('class(aaa) ' // w // ' gen')59 end60 subroutine ptaaa161 call paaa(aaa(), 'aaa')62 end63end64 65module mb66 use ma67 type, extends(a) :: ab68 contains69 procedure, public, nopass :: tbp => sub_ab70 end type71 type, extends(aa) :: aab72 contains73 procedure, public, nopass :: tbp => sub_aab74 end type75 type, extends(aaa) :: aaab76 contains77 procedure, public, nopass :: tbp => sub_aaab78 end type79 type, extends(ab) :: aba80 contains81 procedure, public, nopass :: tbp => sub_aba82 end type83 type, extends(aab) :: aaba84 contains85 procedure, public, nopass :: tbp => sub_aaba86 end type87 type, extends(aaab) :: aaaba88 contains89 procedure, public, nopass :: tbp => sub_aaaba90 end type91 contains92 subroutine sub_ab(w)93 character*(*), intent(in) :: w94 print *, w, ' -> ab'95 end96 subroutine sub_aab(w)97 character*(*), intent(in) :: w98 print *, w, ' -> aab'99 end100 subroutine sub_aaab(w)101 character*(*), intent(in) :: w102 print *, w, ' -> aaab'103 end104 subroutine sub_aba(w)105 character*(*), intent(in) :: w106 print *, w, ' -> aba'107 end108 subroutine sub_aaba(w)109 character*(*), intent(in) :: w110 print *, w, ' -> aaba'111 end112 subroutine sub_aaaba(w)113 character*(*), intent(in) :: w114 print *, w, ' -> aaaba'115 end116end117 118module t119 use mb120 contains121 subroutine mono2122 type(a) :: xa123 type(aa) :: xaa124 type(aaa) :: xaaa125 type(ab) :: xab126 type(aab) :: xaab127 type(aaab) :: xaaab128 type(aba) :: xaba129 type(aaba) :: xaaba130 type(aaaba) :: xaaaba131 call xa%gen('type(a) gen')132 call xaa%gen('type(aa) gen')133 call xaaa%tbp('type(aaa) tbp')134 call xaaa%gen('type(aaa) gen')135 call xab%tbp('type(ab) tbp')136 call xab%gen('type(ab) gen')137 call xaab%tbp('type(aab) tbp')138 call xaab%gen('type(aab) gen')139 call xaaab%tbp('type(aaab) tbp')140 call xaaab%gen('type(aaab) gen')141 call xaba%tbp('type(aba) tbp')142 call xaba%gen('type(aba) gen')143 call xaaba%tbp('type(aaba) tbp')144 call xaaba%gen('type(aaba) gen')145 call xaaaba%tbp('type(aaaba) tbp')146 call xaaaba%gen('type(aaaba) gen')147 end148 subroutine pta2149 call pa(a(), 'a')150 call pa(aa(), 'aa')151 call pa(aaa(), 'aaa')152 call pa(ab(), 'ab')153 call pa(aab(), 'aab')154 call pa(aaab(), 'aaab')155 call pa(aba(), 'aba')156 call pa(aaba(), 'aaba')157 call pa(aaaba(), 'aaaba')158 end159 subroutine ptaa2160 call paa(aa(), 'aa')161 call paa(aaa(), 'aaa')162 call paa(aab(), 'aab')163 call paa(aaab(), 'aaab')164 call paa(aaba(), 'aaba')165 call paa(aaaba(), 'aaaba')166 end167 subroutine ptaaa2168 call paaa(aaa(), 'aaa')169 call paaa(aaab(), 'aaab')170 call paaa(aaaba(), 'aaaba')171 end172 subroutine pab(x, w)173 class(ab), intent(in) :: x174 character*(*), intent(in) :: w175 call x%tbp('class(ab) ' // w // ' tbp')176 call x%gen('class(ab) ' // w // ' gen')177 end178 subroutine ptab179 call pab(ab(), 'ab')180 call pab(aba(), 'aba')181 end182 subroutine paab(x, w)183 class(aab), intent(in) :: x184 character*(*), intent(in) :: w185 call x%tbp('class(aab) ' // w // ' tbp')186 call x%gen('class(aab) ' // w // ' gen')187 end188 subroutine ptaab189 call pa(aab(), 'aab')190 call pa(aaba(), 'aaba')191 end192 subroutine paaab(x, w)193 class(aaab), intent(in) :: x194 character*(*), intent(in) :: w195 call x%tbp('class(aaab) ' // w // ' tbp')196 call x%gen('class(aaab) ' // w // ' gen')197 end198 subroutine ptaaab199 call pa(aaab(), 'aaab')200 call pa(aaaba(), 'aaaba')201 end202 subroutine paba(x, w)203 class(aba), intent(in) :: x204 character*(*), intent(in) :: w205 call x%tbp('class(aba) ' // w // ' tbp')206 call x%gen('class(aba) ' // w // ' gen')207 end208 subroutine ptaba209 call paba(aba(), 'aba')210 end211 subroutine paaba(x, w)212 class(aaba), intent(in) :: x213 character*(*), intent(in) :: w214 call x%tbp('class(aaba) ' // w // ' tbp')215 call x%gen('class(aaba) ' // w // ' gen')216 end217 subroutine ptaaba218 call paaba(aaba(), 'aaba')219 end220 subroutine paaaba(x, w)221 class(aaaba), intent(in) :: x222 character*(*), intent(in) :: w223 call x%tbp('class(aaaba) ' // w // ' tbp')224 call x%gen('class(aaaba) ' // w // ' gen')225 end226 subroutine ptaaaba227 call pa(aaaba(), 'aaaba')228 end229end230 231program main232 use t233 call mono1234 call mono2235 call pta1236 call ptaa1237 call ptaaa1238 call pta2239 call ptaa2240 call ptaaa2241 call ptab242 call ptaab243 call ptaaab244 call ptaba245 call ptaaba246 call ptaaaba247end248 249!CHECK: .v.a, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:0_8 init:[binding::binding(proc=sub_a,name=.n.tbp)]250!CHECK: .v.aa, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:0_8 init:[binding::binding(proc=sub_aa,name=.n.tbp)]251!CHECK: .v.aaa, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:0_8 init:[binding::binding(proc=sub_aaa,name=.n.tbp)]252!CHECK: .v.aaab, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:0_8 init:[binding::binding(proc=sub_aaab,name=.n.tbp)]253!CHECK: .v.aaaba, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:0_8 init:[binding::binding(proc=sub_aaaba,name=.n.tbp)]254!CHECK: .v.aab, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:1_8 init:[binding::binding(proc=sub_aa,name=.n.tbp),binding(proc=sub_aab,name=.n.tbp)]255!CHECK: .v.aaba, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:1_8 init:[binding::binding(proc=sub_aa,name=.n.tbp),binding(proc=sub_aaba,name=.n.tbp)]256!CHECK: .v.ab, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:1_8 init:[binding::binding(proc=sub_a,name=.n.tbp),binding(proc=sub_ab,name=.n.tbp)]257!CHECK: .v.aba, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:1_8 init:[binding::binding(proc=sub_a,name=.n.tbp),binding(proc=sub_aba,name=.n.tbp)]258!CHECK: tbp, NOPASS, PUBLIC: ProcBinding => sub_ab numPrivatesNotOverridden: 1259!CHECK: tbp, NOPASS, PUBLIC: ProcBinding => sub_aab numPrivatesNotOverridden: 1260!CHECK: tbp, NOPASS, PUBLIC: ProcBinding => sub_aba numPrivatesNotOverridden: 1261!CHECK: tbp, NOPASS, PUBLIC: ProcBinding => sub_aaba numPrivatesNotOverridden: 1262