xref: /llvm-project/flang/test/Semantics/generic07.f90 (revision 3d1157000db56a340e1dae90b587bd144ffeaa6c)
1*3d115700SPeter Klausler! RUN: %python %S/test_errors.py %s %flang_fc1
2e87cdda3SPeter Klauslermodule m1
3b26dd424SPeter Klausler  type :: t1
4b26dd424SPeter Klausler    sequence
5b26dd424SPeter Klausler    real :: x
6b26dd424SPeter Klausler  end type
7b26dd424SPeter Klausler  type :: t2
8b26dd424SPeter Klausler    sequence
9b26dd424SPeter Klausler    real :: x
10b26dd424SPeter Klausler  end type
11b26dd424SPeter Klausler  type :: t3
12b26dd424SPeter Klausler    real :: x
13b26dd424SPeter Klausler  end type
14b26dd424SPeter Klausler  type :: t4
15b26dd424SPeter Klausler    real, private :: x
16b26dd424SPeter Klausler  end type
17b26dd424SPeter Klausler contains
18b26dd424SPeter Klausler  subroutine s1a(x)
19b26dd424SPeter Klausler    type(t1), intent(in) :: x
20b26dd424SPeter Klausler  end
21b26dd424SPeter Klausler  subroutine s2a(x)
22b26dd424SPeter Klausler    type(t2), intent(in) :: x
23b26dd424SPeter Klausler  end
24b26dd424SPeter Klausler  subroutine s3a(x)
25b26dd424SPeter Klausler    type(t3), intent(in) :: x
26b26dd424SPeter Klausler  end
27b26dd424SPeter Klausler  subroutine s4a(x)
28b26dd424SPeter Klausler    type(t4), intent(in) :: x
29b26dd424SPeter Klausler  end
30b26dd424SPeter Klauslerend
31b26dd424SPeter Klausler
32e87cdda3SPeter Klauslermodule m2
33e87cdda3SPeter Klausler  type t10
34e87cdda3SPeter Klausler    integer n
35e87cdda3SPeter Klausler   contains
36e87cdda3SPeter Klausler    procedure :: f
37e87cdda3SPeter Klausler    generic:: operator(+) => f
38e87cdda3SPeter Klausler  end type
39e87cdda3SPeter Klausler contains
40e87cdda3SPeter Klausler  elemental type(t10) function f(x,y)
41e87cdda3SPeter Klausler    class(t10), intent(in) :: x, y
42e87cdda3SPeter Klausler    f%n = x%n + y%n
43e87cdda3SPeter Klausler  end
44e87cdda3SPeter Klauslerend
45e87cdda3SPeter Klausler
46e87cdda3SPeter Klauslermodule m3
47e87cdda3SPeter Klausler  use m2, only: rt10 => t10
48e87cdda3SPeter Klauslerend
49e87cdda3SPeter Klausler
50b26dd424SPeter Klauslerprogram test
51e87cdda3SPeter Klausler  use m1, only: s1a, s2a, s3a, s4a
52e87cdda3SPeter Klausler  use m2, only: t10
53e87cdda3SPeter Klausler  use m3, only: rt10 ! alias for t10, ensure no distinguishability error
54b26dd424SPeter Klausler  type :: t1
55b26dd424SPeter Klausler    sequence
56b26dd424SPeter Klausler    integer :: x ! distinct type
57b26dd424SPeter Klausler  end type
58b26dd424SPeter Klausler  type :: t2
59b26dd424SPeter Klausler    sequence
60b26dd424SPeter Klausler    real :: x
61b26dd424SPeter Klausler  end type
62b26dd424SPeter Klausler  type :: t3 ! no SEQUENCE
63b26dd424SPeter Klausler    real :: x
64b26dd424SPeter Klausler  end type
65b26dd424SPeter Klausler  type :: t4
66b26dd424SPeter Klausler    real :: x ! not PRIVATE
67b26dd424SPeter Klausler  end type
68b26dd424SPeter Klausler  interface distinguishable1
69b26dd424SPeter Klausler    procedure :: s1a, s1b
70b26dd424SPeter Klausler  end interface
71b26dd424SPeter Klausler  interface distinguishable2
72b26dd424SPeter Klausler    procedure :: s1a, s1b
73b26dd424SPeter Klausler  end interface
74b26dd424SPeter Klausler  interface distinguishable3
75b26dd424SPeter Klausler    procedure :: s1a, s1b
76b26dd424SPeter Klausler  end interface
77*3d115700SPeter Klausler  !ERROR: Generic 'indistinguishable' may not have specific procedures 's2b' and 's2a' as their interfaces are not distinguishable
78b26dd424SPeter Klausler  interface indistinguishable
79b26dd424SPeter Klausler    procedure :: s2a, s2b
80b26dd424SPeter Klausler  end interface
81b26dd424SPeter Klausler contains
82b26dd424SPeter Klausler  subroutine s1b(x)
83b26dd424SPeter Klausler    type(t1), intent(in) :: x
84b26dd424SPeter Klausler  end
85b26dd424SPeter Klausler  subroutine s2b(x)
86b26dd424SPeter Klausler    type(t2), intent(in) :: x
87b26dd424SPeter Klausler  end
88b26dd424SPeter Klausler  subroutine s3b(x)
89b26dd424SPeter Klausler    type(t3), intent(in) :: x
90b26dd424SPeter Klausler  end
91b26dd424SPeter Klausler  subroutine s4b(x)
92b26dd424SPeter Klausler    type(t4), intent(in) :: x
93b26dd424SPeter Klausler  end
94b26dd424SPeter Klauslerend
95