1*7f7bbc73SPeter Klausler! RUN: %flang_fc1 -fdebug-dump-symbols %s 2>&1 | FileCheck %s 2*7f7bbc73SPeter Klauslermodule ma 3*7f7bbc73SPeter Klausler type a 4*7f7bbc73SPeter Klausler contains 5*7f7bbc73SPeter Klausler procedure, private, nopass :: tbp_private => sub_a1 6*7f7bbc73SPeter Klausler procedure, public, nopass :: tbp_public => sub_a2 7*7f7bbc73SPeter Klausler generic, public :: gen => tbp_private, tbp_public 8*7f7bbc73SPeter Klausler end type 9*7f7bbc73SPeter Klausler contains 10*7f7bbc73SPeter Klausler subroutine sub_a1(w) 11*7f7bbc73SPeter Klausler character*(*), intent(in) :: w 12*7f7bbc73SPeter Klausler print *, w, ' -> a1' 13*7f7bbc73SPeter Klausler end 14*7f7bbc73SPeter Klausler subroutine sub_a2(w, j) 15*7f7bbc73SPeter Klausler character*(*), intent(in) :: w 16*7f7bbc73SPeter Klausler integer, intent(in) :: j 17*7f7bbc73SPeter Klausler print *, w, ' -> a2' 18*7f7bbc73SPeter Klausler end 19*7f7bbc73SPeter Klausler subroutine test_mono_a 20*7f7bbc73SPeter Klausler type(a) x 21*7f7bbc73SPeter Klausler call x%tbp_private('type(a) tbp_private') 22*7f7bbc73SPeter Klausler call x%tbp_public('type(a) tbp_public', 0) 23*7f7bbc73SPeter Klausler call x%gen('type(a) gen 1') 24*7f7bbc73SPeter Klausler call x%gen('type(a) gen 2', 0) 25*7f7bbc73SPeter Klausler end 26*7f7bbc73SPeter Klausler subroutine test_poly_a(x, w) 27*7f7bbc73SPeter Klausler class(a), intent(in) :: x 28*7f7bbc73SPeter Klausler character*(*), intent(in) :: w 29*7f7bbc73SPeter Klausler call x%tbp_private('class(a) (' // w // ') tbp_private') 30*7f7bbc73SPeter Klausler call x%tbp_public('class(a) (' // w // ') tbp_public', 0) 31*7f7bbc73SPeter Klausler call x%gen('class(a) (' // w // ') gen 1') 32*7f7bbc73SPeter Klausler call x%gen('class(a) (' // w // ') gen 2', 0) 33*7f7bbc73SPeter Klausler end 34*7f7bbc73SPeter Klauslerend 35*7f7bbc73SPeter Klausler 36*7f7bbc73SPeter Klauslermodule mb 37*7f7bbc73SPeter Klausler use ma 38*7f7bbc73SPeter Klausler type, extends(a) :: ab 39*7f7bbc73SPeter Klausler contains 40*7f7bbc73SPeter Klausler procedure, private, nopass :: tbp_private => sub_ab1 41*7f7bbc73SPeter Klausler procedure, public, nopass :: tbp_public => sub_ab2 42*7f7bbc73SPeter Klausler end type 43*7f7bbc73SPeter Klausler contains 44*7f7bbc73SPeter Klausler subroutine sub_ab1(w) 45*7f7bbc73SPeter Klausler character*(*), intent(in) :: w 46*7f7bbc73SPeter Klausler print *, w, ' -> ab1' 47*7f7bbc73SPeter Klausler end 48*7f7bbc73SPeter Klausler subroutine sub_ab2(w, j) 49*7f7bbc73SPeter Klausler character*(*), intent(in) :: w 50*7f7bbc73SPeter Klausler integer, intent(in) :: j 51*7f7bbc73SPeter Klausler print *, w, ' -> ab2' 52*7f7bbc73SPeter Klausler end 53*7f7bbc73SPeter Klausler subroutine test_mono_ab 54*7f7bbc73SPeter Klausler type(ab) x 55*7f7bbc73SPeter Klausler call x%tbp_private('type(ab) tbp_private') 56*7f7bbc73SPeter Klausler call x%tbp_public('type(ab) tbp_public', 0) 57*7f7bbc73SPeter Klausler call x%gen('type(ab) gen 1') 58*7f7bbc73SPeter Klausler call x%gen('type(ab) gen 2', 0) 59*7f7bbc73SPeter Klausler end 60*7f7bbc73SPeter Klausler subroutine test_poly_ab(x, w) 61*7f7bbc73SPeter Klausler class(ab), intent(in) :: x 62*7f7bbc73SPeter Klausler character*(*), intent(in) :: w 63*7f7bbc73SPeter Klausler call x%tbp_private('class(ab) (' // w // ') tbp_private') 64*7f7bbc73SPeter Klausler call x%tbp_public('class(ab) (' // w // ') tbp_public', 0) 65*7f7bbc73SPeter Klausler call x%gen('class(ab) (' // w // ') gen 1') 66*7f7bbc73SPeter Klausler call x%gen('class(ab) (' // w // ') gen 2', 0) 67*7f7bbc73SPeter Klausler end 68*7f7bbc73SPeter Klauslerend 69*7f7bbc73SPeter Klausler 70*7f7bbc73SPeter Klauslerprogram main 71*7f7bbc73SPeter Klausler use mb 72*7f7bbc73SPeter Klausler call test_mono_a 73*7f7bbc73SPeter Klausler call test_mono_ab 74*7f7bbc73SPeter Klausler call test_poly_a(a(), 'a') 75*7f7bbc73SPeter Klausler call test_poly_a(ab(), 'ab') 76*7f7bbc73SPeter Klausler call test_poly_ab(ab(), 'ab') 77*7f7bbc73SPeter Klauslerend 78*7f7bbc73SPeter Klausler 79*7f7bbc73SPeter Klausler!CHECK: .v.a, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:1_8 init:[binding::binding(proc=sub_a1,name=.n.tbp_private),binding(proc=sub_a2,name=.n.tbp_public)] 80*7f7bbc73SPeter Klausler!CHECK: .v.ab, SAVE, TARGET (CompilerCreated, ReadOnly): ObjectEntity type: TYPE(binding) shape: 0_8:2_8 init:[binding::binding(proc=sub_a1,name=.n.tbp_private),binding(proc=sub_ab2,name=.n.tbp_public),binding(proc=sub_ab1,name=.n.tbp_private)] 81*7f7bbc73SPeter Klausler!CHECK: tbp_private, NOPASS, PRIVATE: ProcBinding => sub_ab1 numPrivatesNotOverridden: 1 82