xref: /llvm-project/flang/test/Semantics/resolve114.f90 (revision 1c91d9bdea3b6c38e8fbce46ec8181a9c0aa26f8)
1*1c91d9bdSPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic
2b05486dbSPeter Klausler! Allow the same external or intrinsic procedure to be use-associated
3b05486dbSPeter Klausler! by multiple paths when they are unambiguous.
4b05486dbSPeter Klauslermodule m1
5b05486dbSPeter Klausler  intrinsic :: sin
6b05486dbSPeter Klausler  intrinsic :: iabs
7b05486dbSPeter Klausler  interface
8b05486dbSPeter Klausler    subroutine ext1(a, b)
9b05486dbSPeter Klausler      integer, intent(in) :: a(:)
10b05486dbSPeter Klausler      real, intent(in) :: b(:)
11b05486dbSPeter Klausler    end subroutine
12b05486dbSPeter Klausler    subroutine ext2(a, b)
13b05486dbSPeter Klausler      real, intent(in) :: a(:)
14b05486dbSPeter Klausler      integer, intent(in) :: b(:)
15b05486dbSPeter Klausler    end subroutine
16b05486dbSPeter Klausler  end interface
17b05486dbSPeter Klauslerend module m1
18b05486dbSPeter Klausler
19b05486dbSPeter Klauslermodule m2
20b05486dbSPeter Klausler  intrinsic :: sin, tan
21b05486dbSPeter Klausler  intrinsic :: iabs, idim
22b05486dbSPeter Klausler  interface
23b05486dbSPeter Klausler    subroutine ext1(a, b)
24b05486dbSPeter Klausler      integer, intent(in) :: a(:)
25b05486dbSPeter Klausler      real, intent(in) :: b(:)
26b05486dbSPeter Klausler    end subroutine
27b05486dbSPeter Klausler    subroutine ext2(a, b)
28b05486dbSPeter Klausler      real, intent(in) :: a(:)
29b05486dbSPeter Klausler      integer, intent(in) :: b(:)
30b05486dbSPeter Klausler    end subroutine
31b05486dbSPeter Klausler  end interface
32b05486dbSPeter Klauslerend module m2
33b05486dbSPeter Klausler
34b05486dbSPeter Klauslersubroutine s2a
35b05486dbSPeter Klausler  use m1
36b05486dbSPeter Klausler  use m2
370c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p1' should not have an ELEMENTAL intrinsic as its interface
38b05486dbSPeter Klausler  procedure(sin), pointer :: p1 => sin
390c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p2' should not have an ELEMENTAL intrinsic as its interface
40b05486dbSPeter Klausler  procedure(iabs), pointer :: p2 => iabs
41b05486dbSPeter Klausler  procedure(ext1), pointer :: p3 => ext1
42b05486dbSPeter Klausler  procedure(ext2), pointer :: p4 => ext2
43b05486dbSPeter Klauslerend subroutine
44b05486dbSPeter Klausler
45b05486dbSPeter Klauslersubroutine s2b
46b05486dbSPeter Klausler  use m1, only: x1 => sin, x2 => iabs, x3 => ext1, x4 => ext2
47b05486dbSPeter Klausler  use m2, only: x1 => sin, x2 => iabs, x3 => ext1, x4 => ext2
48b05486dbSPeter Klausler  use m1, only: iface1 => sin, iface2 => iabs, iface3 => ext1, iface4 => ext2
490c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p1' should not have an ELEMENTAL intrinsic as its interface
50b05486dbSPeter Klausler  procedure(iface1), pointer :: p1 => x1
510c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p2' should not have an ELEMENTAL intrinsic as its interface
52b05486dbSPeter Klausler  procedure(iface2), pointer :: p2 => x2
53b05486dbSPeter Klausler  procedure(iface3), pointer :: p3 => x3
54b05486dbSPeter Klausler  procedure(iface4), pointer :: p4 => x4
55b05486dbSPeter Klauslerend subroutine
56b05486dbSPeter Klausler
57b05486dbSPeter Klauslermodule m3
58b05486dbSPeter Klausler  use m1
59b05486dbSPeter Klausler  use m2
60b05486dbSPeter Klauslerend module
61b05486dbSPeter Klauslersubroutine s3
62b05486dbSPeter Klausler  use m3
630c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p1' should not have an ELEMENTAL intrinsic as its interface
64b05486dbSPeter Klausler  procedure(sin), pointer :: p1 => sin
650c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p2' should not have an ELEMENTAL intrinsic as its interface
66b05486dbSPeter Klausler  procedure(iabs), pointer :: p2 => iabs
67b05486dbSPeter Klausler  procedure(ext1), pointer :: p3 => ext1
68b05486dbSPeter Klausler  procedure(ext2), pointer :: p4 => ext2
69b05486dbSPeter Klauslerend subroutine
70b05486dbSPeter Klausler
71b05486dbSPeter Klauslermodule m4
72b05486dbSPeter Klausler  use m1, only: x1 => sin, x2 => iabs, x3 => ext1, x4 => ext2
73b05486dbSPeter Klausler  use m2, only: x1 => sin, x2 => iabs, x3 => ext1, x4 => ext2
74b05486dbSPeter Klauslerend module
75b05486dbSPeter Klauslersubroutine s4
76b05486dbSPeter Klausler  use m4
77b05486dbSPeter Klausler  use m1, only: iface1 => sin, iface2 => iabs, iface3 => ext1, iface4 => ext2
780c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p1' should not have an ELEMENTAL intrinsic as its interface
79b05486dbSPeter Klausler  procedure(iface1), pointer :: p1 => x1
800c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p2' should not have an ELEMENTAL intrinsic as its interface
81b05486dbSPeter Klausler  procedure(iface2), pointer :: p2 => x2
82b05486dbSPeter Klausler  procedure(iface3), pointer :: p3 => x3
83b05486dbSPeter Klausler  procedure(iface4), pointer :: p4 => x4
84b05486dbSPeter Klauslerend subroutine
85b05486dbSPeter Klausler
86b05486dbSPeter Klauslersubroutine s5
87b05486dbSPeter Klausler  use m1, only: x1 => sin, x2 => iabs, x3 => ext1, x4 => ext2
88b05486dbSPeter Klausler  use m2, only: x1 => tan, x2 => idim, x3 => ext2, x4 => ext1
89b05486dbSPeter Klausler  use m1, only: iface1 => sin, iface2 => iabs, iface3 => ext1, iface4 => ext2
900c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p1' should not have an ELEMENTAL intrinsic as its interface
91b05486dbSPeter Klausler  !ERROR: Reference to 'x1' is ambiguous
92b05486dbSPeter Klausler  procedure(iface1), pointer :: p1 => x1
930c0b2ea9SPeter Klausler  !PORTABILITY: Procedure pointer 'p2' should not have an ELEMENTAL intrinsic as its interface
94b05486dbSPeter Klausler  !ERROR: Reference to 'x2' is ambiguous
95b05486dbSPeter Klausler  procedure(iface2), pointer :: p2 => x2
96b05486dbSPeter Klausler  !ERROR: Reference to 'x3' is ambiguous
97b05486dbSPeter Klausler  procedure(iface3), pointer :: p3 => x3
98b05486dbSPeter Klausler  !ERROR: Reference to 'x4' is ambiguous
99b05486dbSPeter Klausler  procedure(iface4), pointer :: p4 => x4
100b05486dbSPeter Klauslerend subroutine
101