xref: /llvm-project/flang/test/Semantics/modfile04.f90 (revision 199402c378630be3449d2a006812b9e9f0caa7ce)
1dc453dcfSIvan Zhechev! RUN: %python %S/test_modfile.py %s %flang_fc1
264ab3302SCarolineConcatto! modfile with subprograms
364ab3302SCarolineConcatto
464ab3302SCarolineConcattomodule m1
564ab3302SCarolineConcatto  type :: t
664ab3302SCarolineConcatto  end type
764ab3302SCarolineConcattocontains
864ab3302SCarolineConcatto
95d3249e9STim Keith  pure subroutine Ss(x, y) bind(c)
10*199402c3SPeter Klausler    logical(1) x
1164ab3302SCarolineConcatto    intent(inout) y
1264ab3302SCarolineConcatto    intent(in) x
1364ab3302SCarolineConcatto  end subroutine
1464ab3302SCarolineConcatto
1564ab3302SCarolineConcatto  real function f1() result(x)
1664ab3302SCarolineConcatto    x = 1.0
1764ab3302SCarolineConcatto  end function
1864ab3302SCarolineConcatto
1964ab3302SCarolineConcatto  function f2(y)
2064ab3302SCarolineConcatto    complex y
2164ab3302SCarolineConcatto    f2 = 2.0
2264ab3302SCarolineConcatto  end function
2364ab3302SCarolineConcatto
2464ab3302SCarolineConcattoend
2564ab3302SCarolineConcatto
2664ab3302SCarolineConcattomodule m2
2764ab3302SCarolineConcattocontains
2864ab3302SCarolineConcatto  type(t) function f3(x)
2964ab3302SCarolineConcatto    use m1
3064ab3302SCarolineConcatto    integer, parameter :: a = 2
3164ab3302SCarolineConcatto    type t2(b)
3264ab3302SCarolineConcatto      integer, kind :: b = a
3364ab3302SCarolineConcatto      integer :: y
3464ab3302SCarolineConcatto    end type
3564ab3302SCarolineConcatto    type(t2) :: x
3664ab3302SCarolineConcatto  end
3764ab3302SCarolineConcatto  function f4() result(x)
3864ab3302SCarolineConcatto    implicit complex(x)
3964ab3302SCarolineConcatto  end
4064ab3302SCarolineConcattoend
4164ab3302SCarolineConcatto
423ed2909fSPete Steinfeld! Module with a subroutine with alternate returns
433ed2909fSPete Steinfeldmodule m3
443ed2909fSPete Steinfeldcontains
453ed2909fSPete Steinfeld  subroutine altReturn(arg1, arg2, *, *)
463ed2909fSPete Steinfeld    real :: arg1
473ed2909fSPete Steinfeld    real :: arg2
483ed2909fSPete Steinfeld  end subroutine
493ed2909fSPete Steinfeldend module m3
503ed2909fSPete Steinfeld
5164ab3302SCarolineConcatto!Expect: m1.mod
5264ab3302SCarolineConcatto!module m1
5364ab3302SCarolineConcatto!type::t
5464ab3302SCarolineConcatto!end type
5564ab3302SCarolineConcatto!contains
5669e2665cSPeter Klausler!pure subroutine ss(x,y) bind(c)
57*199402c3SPeter Klausler!logical(1),intent(in)::x
5864ab3302SCarolineConcatto!real(4),intent(inout)::y
5964ab3302SCarolineConcatto!end
6064ab3302SCarolineConcatto!function f1() result(x)
6164ab3302SCarolineConcatto!real(4)::x
6264ab3302SCarolineConcatto!end
6364ab3302SCarolineConcatto!function f2(y)
6464ab3302SCarolineConcatto!complex(4)::y
6564ab3302SCarolineConcatto!real(4)::f2
6664ab3302SCarolineConcatto!end
6764ab3302SCarolineConcatto!end
6864ab3302SCarolineConcatto
6964ab3302SCarolineConcatto!Expect: m2.mod
7064ab3302SCarolineConcatto!module m2
7164ab3302SCarolineConcatto!contains
7264ab3302SCarolineConcatto!function f3(x)
7364ab3302SCarolineConcatto! use m1,only:t
7464ab3302SCarolineConcatto! type::t2(b)
7564ab3302SCarolineConcatto!  integer(4),kind::b=2_4
7664ab3302SCarolineConcatto!  integer(4)::y
7764ab3302SCarolineConcatto! end type
7864ab3302SCarolineConcatto! type(t2(b=2_4))::x
7964ab3302SCarolineConcatto! type(t)::f3
8064ab3302SCarolineConcatto!end
8164ab3302SCarolineConcatto!function f4() result(x)
8264ab3302SCarolineConcatto!complex(4)::x
8364ab3302SCarolineConcatto!end
8464ab3302SCarolineConcatto!end
853ed2909fSPete Steinfeld
863ed2909fSPete Steinfeld!Expect: m3.mod
873ed2909fSPete Steinfeld!module m3
883ed2909fSPete Steinfeld!contains
893ed2909fSPete Steinfeld!subroutine altreturn(arg1,arg2,*,*)
903ed2909fSPete Steinfeld!real(4)::arg1
913ed2909fSPete Steinfeld!real(4)::arg2
923ed2909fSPete Steinfeld!end
933ed2909fSPete Steinfeld!end
94