xref: /llvm-project/flang/test/Semantics/modfile46.f90 (revision df3e5f18d0eb5c7b389f2a17f6cdb08a4787800c)
1b85922cdSEmil Kieri! RUN: %python %S/test_modfile.py %s %flang_fc1
2b85922cdSEmil Kieri! Ensure that interfaces, which are internal to procedures and are used to
3b85922cdSEmil Kieri! define the interface of dummy or return value procedures, are included in
4b85922cdSEmil Kieri! .mod files.
5b85922cdSEmil Kierimodule m
6b85922cdSEmil Kieri  implicit none
7b85922cdSEmil Kiericontains
8b85922cdSEmil Kieri  function f(x)
9b85922cdSEmil Kieri    real, intent(in) :: x
10b85922cdSEmil Kieri    abstract interface
11b85922cdSEmil Kieri       subroutine used_int(x, p)
12b85922cdSEmil Kieri         implicit none
13b85922cdSEmil Kieri         real, intent(out) :: x
14b85922cdSEmil Kieri         interface
15b85922cdSEmil Kieri            subroutine inner_int(x)
16b85922cdSEmil Kieri              implicit none
17b85922cdSEmil Kieri              real, intent(out) :: x
18b85922cdSEmil Kieri            end subroutine inner_int
19b85922cdSEmil Kieri         end interface
20b85922cdSEmil Kieri         procedure(inner_int) :: p
21b85922cdSEmil Kieri       end subroutine used_int
22b85922cdSEmil Kieri
23b85922cdSEmil Kieri       pure logical function unused_int(i)
24b85922cdSEmil Kieri         implicit none
25b85922cdSEmil Kieri         integer, intent(in) :: i
26b85922cdSEmil Kieri       end function unused_int
27b85922cdSEmil Kieri    end interface
28b85922cdSEmil Kieri    procedure(used_int), pointer :: f
29b85922cdSEmil Kieri
30b85922cdSEmil Kieri    f => null()
31b85922cdSEmil Kieri  contains
32b85922cdSEmil Kieri    subroutine internal()
33b85922cdSEmil Kieri    end subroutine internal
34b85922cdSEmil Kieri  end function f
35b85922cdSEmil Kieriend module m
36b85922cdSEmil Kieri
37b85922cdSEmil Kieri!Expect: m.mod
38b85922cdSEmil Kieri!module m
39b85922cdSEmil Kieri!contains
40b85922cdSEmil Kieri!function f(x)
41b85922cdSEmil Kieri!real(4),intent(in)::x
42b85922cdSEmil Kieri!abstract interface
43b85922cdSEmil Kieri!subroutine used_int(x,p)
44b85922cdSEmil Kieri!real(4),intent(out)::x
45b85922cdSEmil Kieri!interface
46b85922cdSEmil Kieri!subroutine inner_int(x)
47b85922cdSEmil Kieri!real(4),intent(out)::x
48b85922cdSEmil Kieri!end
49b85922cdSEmil Kieri!end interface
50*df3e5f18SPeter Klausler!procedure(inner_int)::p
51b85922cdSEmil Kieri!end
52b85922cdSEmil Kieri!end interface
53*df3e5f18SPeter Klausler!procedure(used_int),pointer::f
54b85922cdSEmil Kieri!end
55b85922cdSEmil Kieri!end
56