xref: /llvm-project/flang/test/Semantics/symbol29.f90 (revision 456fdf851c19f79a895c59341d491ce819138522)
1! RUN: %python %S/test_symbols.py %s %flang_fc1
2! References to generic functions with forward-referenced specifics.
3!DEF: /m Module
4module m
5contains
6 !DEF: /m/specific4 PUBLIC (Function) Subprogram INTEGER(4)
7 !DEF: /m/specific4/x INTENT(IN) ObjectEntity INTEGER(4)
8 integer function specific4(x)
9  !REF: /m/specific4/x
10  integer, intent(in) :: x(*)
11 end function
12 !DEF: /m/test PUBLIC (Subroutine) Subprogram
13 !DEF: /m/test/specific1 EXTERNAL (Function) Subprogram INTEGER(4)
14 subroutine test (specific1)
15  !DEF: /m/test/generic (Function) Generic
16  interface generic
17   !REF: /m/test/specific1
18   procedure :: specific1
19   !DEF: /m/test/specific2 EXTERNAL, PURE (Function) Subprogram INTEGER(4)
20   procedure :: specific2
21   !DEF: /m/test/specific3 EXTERNAL (Function) Subprogram INTEGER(4)
22   procedure :: specific3
23   !DEF: /m/test/specific4 EXTERNAL (Function) Subprogram INTEGER(4)
24   procedure :: specific4
25  end interface
26  interface
27   !REF: /m/test/specific1
28   !DEF: /m/test/specific1/x INTENT(IN) ObjectEntity INTEGER(4)
29   integer function specific1(x)
30    !REF: /m/test/specific1/x
31    integer, intent(in) :: x
32   end function
33   !REF: /m/test/specific2
34   !DEF: /m/test/specific2/x INTENT(IN) ObjectEntity INTEGER(4)
35   !DEF: /m/test/specific2/y INTENT(IN) ObjectEntity INTEGER(4)
36   pure integer function specific2(x, y)
37    !REF: /m/test/specific2/x
38    !REF: /m/test/specific2/y
39    integer, intent(in) :: x, y
40   end function
41   !REF: /m/test/specific3
42   !DEF: /m/test/specific3/x INTENT(IN) ObjectEntity INTEGER(4)
43   !DEF: /m/test/specific3/y INTENT(IN) ObjectEntity INTEGER(4)
44   integer function specific3(x, y)
45    !REF: /m/test/generic
46    import :: generic
47    !REF: /m/test/specific3/x
48    !REF: /m/test/specific3/y
49    !REF: /m/test/specific2
50    integer, intent(in) :: x, y(generic(1, x))
51   end function
52   !REF: /m/test/specific4
53   !DEF: /m/test/specific4/x INTENT(IN) ObjectEntity INTEGER(4)
54   integer function specific4(x)
55    !REF: /m/test/specific4/x
56    integer, intent(in) :: x(:)
57   end function
58  end interface
59  !REF: /m/test/specific4
60  print *, generic([1])
61 end subroutine
62end module
63