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