| ! RUN: %python %S/test_modfile.py %s %flang_fc1 |
| ! Check modfile generation with use-association. |
| |
| module m1 |
| integer :: x1 |
| integer, private :: x2 |
| end |
| !Expect: m1.mod |
| !module m1 |
| !integer(4)::x1 |
| !integer(4),private::x2 |
| !end |
| |
| module m2 |
| use m1 |
| integer :: y1 |
| end |
| !Expect: m2.mod |
| !module m2 |
| !use m1,only:x1 |
| !integer(4)::y1 |
| !end |
| |
| module m3 |
| use m2, z1 => x1 |
| end |
| !Expect: m3.mod |
| !module m3 |
| !use m2,only:y1 |
| !use m2,only:z1=>x1 |
| !end |
| |
| module m4 |
| use m1 |
| use m2 |
| end |
| !Expect: m4.mod |
| !module m4 |
| !use m1,only:x1 |
| !use m2,only:y1 |
| !end |
| |
| module m5a |
| integer, parameter :: k1 = 4 |
| integer :: l1 = 2 |
| type t1 |
| real :: a |
| end type |
| contains |
| pure integer function f1(i) |
| value :: i |
| f1 = i |
| end |
| end |
| !Expect: m5a.mod |
| !module m5a |
| ! integer(4),parameter::k1=4_4 |
| ! integer(4)::l1 |
| ! type::t1 |
| ! real(4)::a |
| ! end type |
| !contains |
| ! pure function f1(i) |
| ! integer(4),value::i |
| ! integer(4)::f1 |
| ! end |
| !end |
| |
| module m5b |
| use m5a, only: k2 => k1, l2 => l1, f2 => f1 |
| interface |
| subroutine s(x, y) |
| import f2, l2 |
| character(l2, k2) :: x |
| character(f2(l2)) :: y |
| end subroutine |
| end interface |
| end |
| !Expect: m5b.mod |
| !module m5b |
| ! use m5a,only:k2=>k1 |
| ! use m5a,only:l2=>l1 |
| ! use m5a,only:f2=>f1 |
| ! interface |
| ! subroutine s(x,y) |
| ! import::f2 |
| ! import::l2 |
| ! character(l2,4)::x |
| ! character(f2(l2),1)::y |
| ! end |
| ! end interface |
| !end |
| |
| module m6a |
| type t1 |
| end type |
| end |
| !Expect: m6a.mod |
| !module m6a |
| ! type::t1 |
| ! end type |
| !end |
| |
| module m6b |
| use m6a, only: t2 => t1 |
| contains |
| subroutine s(x) |
| type(t2) :: x |
| end |
| end |
| !Expect: m6b.mod |
| !module m6b |
| ! use m6a,only:t2=>t1 |
| !contains |
| ! subroutine s(x) |
| ! type(t2)::x |
| ! end |
| !end |
| |
| module m6c |
| use m6a, only: t2 => t1 |
| type, extends(t2) :: t |
| end type |
| end |
| !Expect: m6c.mod |
| !module m6c |
| ! use m6a,only:t2=>t1 |
| ! type,extends(t2)::t |
| ! end type |
| !end |
| |
| module m6d |
| use m6a, only: t2 => t1 |
| type(t2), parameter :: p = t2() |
| end |
| !Expect: m6d.mod |
| !module m6d |
| ! use m6a,only:t2=>t1 |
| ! type(t2),parameter::p=t2() |
| !end |
| |
| module m6e |
| use m6a, only: t2 => t1 |
| interface |
| subroutine s(x) |
| import t2 |
| type(t2) :: x |
| end subroutine |
| end interface |
| end |
| !Expect: m6e.mod |
| !module m6e |
| ! use m6a,only:t2=>t1 |
| ! interface |
| ! subroutine s(x) |
| ! import::t2 |
| ! type(t2)::x |
| ! end |
| ! end interface |
| !end |
| |
| module m7a |
| real :: x |
| end |
| !Expect: m7a.mod |
| !module m7a |
| ! real(4)::x |
| !end |
| |
| module m7b |
| use m7a |
| private |
| end |
| !Expect: m7b.mod |
| !module m7b |
| ! use m7a,only:x |
| ! private::x |
| !end |