1! { dg-do compile } 2! This tests the fix for PR32634, in which the generic interface 3! in foo_pr_mod was given the original rather than the local name. 4! This meant that the original name had to be used in the calll 5! in foo_sub. 6! 7! Contributed by Salvatore Filippone <salvatore.filippone@uniroma2.it> 8 9module foo_base_mod 10 type foo_dmt 11 real(kind(1.d0)), allocatable :: rv(:) 12 integer, allocatable :: iv1(:), iv2(:) 13 end type foo_dmt 14 type foo_zmt 15 complex(kind(1.d0)), allocatable :: rv(:) 16 integer, allocatable :: iv1(:), iv2(:) 17 end type foo_zmt 18 type foo_cdt 19 integer, allocatable :: md(:) 20 integer, allocatable :: hi(:), ei(:) 21 end type foo_cdt 22end module foo_base_mod 23 24module bar_prt 25 use foo_base_mod, only : foo_dmt, foo_zmt, foo_cdt 26 type bar_dbprt 27 type(foo_dmt), allocatable :: av(:) 28 real(kind(1.d0)), allocatable :: d(:) 29 type(foo_cdt) :: cd 30 end type bar_dbprt 31 type bar_dprt 32 type(bar_dbprt), allocatable :: bpv(:) 33 end type bar_dprt 34 type bar_zbprt 35 type(foo_zmt), allocatable :: av(:) 36 complex(kind(1.d0)), allocatable :: d(:) 37 type(foo_cdt) :: cd 38 end type bar_zbprt 39 type bar_zprt 40 type(bar_zbprt), allocatable :: bpv(:) 41 end type bar_zprt 42end module bar_prt 43 44module bar_pr_mod 45 use bar_prt 46 interface bar_pwrk 47 subroutine bar_dppwrk(pr,x,y,cd,info,trans,work) 48 use foo_base_mod 49 use bar_prt 50 type(foo_cdt),intent(in) :: cd 51 type(bar_dprt), intent(in) :: pr 52 real(kind(0.d0)),intent(inout) :: x(:), y(:) 53 integer, intent(out) :: info 54 character(len=1), optional :: trans 55 real(kind(0.d0)),intent(inout), optional, target :: work(:) 56 end subroutine bar_dppwrk 57 subroutine bar_zppwrk(pr,x,y,cd,info,trans,work) 58 use foo_base_mod 59 use bar_prt 60 type(foo_cdt),intent(in) :: cd 61 type(bar_zprt), intent(in) :: pr 62 complex(kind(0.d0)),intent(inout) :: x(:), y(:) 63 integer, intent(out) :: info 64 character(len=1), optional :: trans 65 complex(kind(0.d0)),intent(inout), optional, target :: work(:) 66 end subroutine bar_zppwrk 67 end interface 68end module bar_pr_mod 69 70module foo_pr_mod 71 use bar_prt, & 72 & foo_dbprt => bar_dbprt,& 73 & foo_zbprt => bar_zbprt,& 74 & foo_dprt => bar_dprt,& 75 & foo_zprt => bar_zprt 76 use bar_pr_mod, & 77 & foo_pwrk => bar_pwrk 78end module foo_pr_mod 79 80Subroutine foo_sub(a,pr,b,x,eps,cd,info) 81 use foo_base_mod 82 use foo_pr_mod 83 Implicit None 84!!$ parameters 85 Type(foo_dmt), Intent(in) :: a 86 Type(foo_dprt), Intent(in) :: pr 87 Type(foo_cdt), Intent(in) :: cd 88 Real(Kind(1.d0)), Intent(in) :: b(:) 89 Real(Kind(1.d0)), Intent(inout) :: x(:) 90 Real(Kind(1.d0)), Intent(in) :: eps 91 integer, intent(out) :: info 92!!$ Local data 93 Real(Kind(1.d0)), allocatable, target :: aux(:),wwrk(:,:) 94 Real(Kind(1.d0)), allocatable :: p(:), f(:) 95 info = 0 96 Call foo_pwrk(pr,p,f,cd,info,work=aux) ! This worked if bar_pwrk was called! 97 return 98End Subroutine foo_sub 99