diff options
author | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
---|---|---|
committer | Ben Cheng <bccheng@google.com> | 2014-03-25 22:37:19 -0700 |
commit | 1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch) | |
tree | c607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gfortran.dg/interface_16.f90 | |
parent | 283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff) | |
download | toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2 toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip |
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gfortran.dg/interface_16.f90')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gfortran.dg/interface_16.f90 | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gfortran.dg/interface_16.f90 b/gcc-4.9/gcc/testsuite/gfortran.dg/interface_16.f90 new file mode 100644 index 000000000..1cad75f3c --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gfortran.dg/interface_16.f90 @@ -0,0 +1,98 @@ +! { dg-do compile } +! This tests the fix for PR32634, in which the generic interface +! in foo_pr_mod was given the original rather than the local name. +! This meant that the original name had to be used in the calll +! in foo_sub. +! +! Contributed by Salvatore Filippone <salvatore.filippone@uniroma2.it> + +module foo_base_mod + type foo_dmt + real(kind(1.d0)), allocatable :: rv(:) + integer, allocatable :: iv1(:), iv2(:) + end type foo_dmt + type foo_zmt + complex(kind(1.d0)), allocatable :: rv(:) + integer, allocatable :: iv1(:), iv2(:) + end type foo_zmt + type foo_cdt + integer, allocatable :: md(:) + integer, allocatable :: hi(:), ei(:) + end type foo_cdt +end module foo_base_mod + +module bar_prt + use foo_base_mod, only : foo_dmt, foo_zmt, foo_cdt + type bar_dbprt + type(foo_dmt), allocatable :: av(:) + real(kind(1.d0)), allocatable :: d(:) + type(foo_cdt) :: cd + end type bar_dbprt + type bar_dprt + type(bar_dbprt), allocatable :: bpv(:) + end type bar_dprt + type bar_zbprt + type(foo_zmt), allocatable :: av(:) + complex(kind(1.d0)), allocatable :: d(:) + type(foo_cdt) :: cd + end type bar_zbprt + type bar_zprt + type(bar_zbprt), allocatable :: bpv(:) + end type bar_zprt +end module bar_prt + +module bar_pr_mod + use bar_prt + interface bar_pwrk + subroutine bar_dppwrk(pr,x,y,cd,info,trans,work) + use foo_base_mod + use bar_prt + type(foo_cdt),intent(in) :: cd + type(bar_dprt), intent(in) :: pr + real(kind(0.d0)),intent(inout) :: x(:), y(:) + integer, intent(out) :: info + character(len=1), optional :: trans + real(kind(0.d0)),intent(inout), optional, target :: work(:) + end subroutine bar_dppwrk + subroutine bar_zppwrk(pr,x,y,cd,info,trans,work) + use foo_base_mod + use bar_prt + type(foo_cdt),intent(in) :: cd + type(bar_zprt), intent(in) :: pr + complex(kind(0.d0)),intent(inout) :: x(:), y(:) + integer, intent(out) :: info + character(len=1), optional :: trans + complex(kind(0.d0)),intent(inout), optional, target :: work(:) + end subroutine bar_zppwrk + end interface +end module bar_pr_mod + +module foo_pr_mod + use bar_prt, & + & foo_dbprt => bar_dbprt,& + & foo_zbprt => bar_zbprt,& + & foo_dprt => bar_dprt,& + & foo_zprt => bar_zprt + use bar_pr_mod, & + & foo_pwrk => bar_pwrk +end module foo_pr_mod + +Subroutine foo_sub(a,pr,b,x,eps,cd,info) + use foo_base_mod + use foo_pr_mod + Implicit None +!!$ parameters + Type(foo_dmt), Intent(in) :: a + Type(foo_dprt), Intent(in) :: pr + Type(foo_cdt), Intent(in) :: cd + Real(Kind(1.d0)), Intent(in) :: b(:) + Real(Kind(1.d0)), Intent(inout) :: x(:) + Real(Kind(1.d0)), Intent(in) :: eps + integer, intent(out) :: info +!!$ Local data + Real(Kind(1.d0)), allocatable, target :: aux(:),wwrk(:,:) + Real(Kind(1.d0)), allocatable :: p(:), f(:) + info = 0 + Call foo_pwrk(pr,p,f,cd,info,work=aux) ! This worked if bar_pwrk was called! + return +End Subroutine foo_sub |