1! RUN: %python %S/test_errors.py %s %flang_fc1
2module m2
3  public s2, s4
4  private s3
5contains
6  subroutine s2
7  end
8  subroutine s3
9  end
10  subroutine s4
11  end
12end module
13
14module m
15  use m2
16  external bar
17  interface
18    subroutine foo
19    end subroutine
20  end interface
21  integer :: i
22  type t1
23    integer :: c
24  contains
25    !ERROR: The binding of 'a' ('missing') must be either an accessible module procedure or an external procedure with an explicit interface
26    procedure, nopass :: a => missing
27    procedure, nopass :: b => s, s2
28    !ERROR: Type parameter, component, or procedure binding 'c' already defined in this type
29    procedure, nopass :: c
30    !ERROR: DEFERRED is only allowed when an interface-name is provided
31    procedure, nopass, deferred :: d => s
32    !Note: s3 not found because it's not accessible -- should we issue a message
33    !to that effect?
34    !ERROR: 's3' must be either an accessible module procedure or an external procedure with an explicit interface
35    procedure, nopass :: s3
36    procedure, nopass :: foo
37    !ERROR: 'bar' must be either an accessible module procedure or an external procedure with an explicit interface
38    procedure, nopass :: bar
39    !ERROR: 'i' must be either an accessible module procedure or an external procedure with an explicit interface
40    procedure, nopass :: i
41    !ERROR: Type parameter, component, or procedure binding 'b' already defined in this type
42    procedure, nopass :: b => s4
43    !ERROR: DEFERRED is required when an interface-name is provided
44    procedure(foo), nopass :: g
45  end type
46  type, abstract :: t1a ! DEFERRED valid only in ABSTRACT derived type
47  contains
48    procedure(foo), nopass, deferred :: e
49    procedure(s), nopass, deferred :: f
50    !ERROR: Type parameter, component, or procedure binding 'f' already defined in this type
51    procedure(foo), nopass, deferred :: f
52    !ERROR: 'bar' must be an abstract interface or a procedure with an explicit interface
53    procedure(bar), nopass, deferred :: h
54  end type
55  type t2
56    integer :: i
57  contains
58    procedure, nopass :: b => s
59    final :: f
60    !ERROR: FINAL subroutine 'i' of derived type 't2' must be a module procedure
61    final :: i
62  end type
63  type t3
64  contains
65    private
66    procedure, nopass :: b => s
67    procedure, nopass, public :: f
68  end type
69contains
70  subroutine s
71  end
72  subroutine f(x)
73    type(t2) :: x
74  end
75end module
76