assign04.f90
2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
! RUN: %S/test_errors.sh %s %t %f18
! 9.4.5
subroutine s1
type :: t(k, l)
integer, kind :: k
integer, len :: l
end type
type(t(1, 2)) :: x
!ERROR: Assignment to constant 'x%k' is not allowed
x%k = 4
!ERROR: Left-hand side of assignment is not modifiable
x%l = 3
end
! C901
subroutine s2(x)
!ERROR: A dummy argument may not also be a named constant
real, parameter :: x = 0.0
real, parameter :: a(*) = [1, 2, 3]
character, parameter :: c(2) = "ab"
integer :: i
!ERROR: Assignment to constant 'x' is not allowed
x = 2.0
i = 2
!ERROR: Left-hand side of assignment is not modifiable
a(i) = 3.0
!ERROR: Left-hand side of assignment is not modifiable
a(i:i+1) = [4, 5]
!ERROR: Left-hand side of assignment is not modifiable
c(i:2) = "cd"
end
! C901
subroutine s3
type :: t
integer :: a(2)
integer :: b
end type
type(t) :: x
type(t), parameter :: y = t([1,2], 3)
integer :: i = 1
x%a(i) = 1
!ERROR: Left-hand side of assignment is not modifiable
y%a(i) = 2
x%b = 4
!ERROR: Assignment to constant 'y%b' is not allowed
y%b = 5
end
! C844
subroutine s4
type :: t
integer :: a(2)
end type
contains
subroutine s(x, c)
type(t), intent(in) :: x
character(10), intent(in) :: c
type(t) :: y
!ERROR: Left-hand side of assignment is not modifiable
x = y
!ERROR: Left-hand side of assignment is not modifiable
x%a(1) = 2
!ERROR: Left-hand side of assignment is not modifiable
c(2:3) = "ab"
end
end
! 8.5.15(2)
module m5
real :: x
real, protected :: y
real, private :: z
type :: t
real :: a
end type
type(t), protected :: b
end
subroutine s5()
use m5
implicit none
x = 1.0
!ERROR: Left-hand side of assignment is not modifiable
y = 2.0
!ERROR: No explicit type declared for 'z'
z = 3.0
!ERROR: Left-hand side of assignment is not modifiable
b%a = 1.0
end
subroutine s6(x)
integer :: x(*)
x(1:3) = [1, 2, 3]
x(:3) = [1, 2, 3]
!ERROR: Assumed-size array 'x' must have explicit final subscript upper bound value
x(:) = [1, 2, 3]
!ERROR: Left-hand side of assignment may not be a whole assumed-size array
x = [1, 2, 3]
end
module m7
type :: t
integer :: i
end type
contains
subroutine s7(x)
type(t) :: x(*)
x(:3)%i = [1, 2, 3]
!ERROR: Left-hand side of assignment may not be a whole assumed-size array
x%i = [1, 2, 3]
end
end
subroutine s7
integer :: a(10), v(10)
a(v(:)) = 1 ! vector subscript is ok
end
subroutine s8
!ERROR: Assignment to subprogram 's8' is not allowed
s8 = 1.0
end
real function f9() result(r)
!ERROR: Assignment to subprogram 'f9' is not allowed
f9 = 1.0
end
!ERROR: No explicit type declared for 'n'
subroutine s10(a, n)
implicit none
real a(n)
a(1:n) = 0.0 ! should not get a second error here
end
subroutine s11
intrinsic :: sin
real :: a
!ERROR: Function call must have argument list
a = sin
!ERROR: Subroutine name is not allowed here
a = s11
end