1! RUN: %python %S/test_errors.py %s %flang_fc1 2! This test checks for semantic errors in atomic_cas subroutine calls based on 3! the interface defined in section 16.9.22 of the Fortran 2018 standard. 4 5program test_atomic_cas 6 use iso_fortran_env, only: atomic_int_kind, atomic_logical_kind 7 implicit none(external, type) 8 9 integer(kind=atomic_int_kind) :: int_scalar_coarray[*], non_scalar_coarray(10)[*], non_coarray 10 integer(kind=atomic_int_kind) :: repeated_atom[*], array(10) 11 integer(kind=atomic_int_kind) :: old_int, compare_int, new_int, non_scalar_int(10) 12 integer(kind=atomic_int_kind) :: repeated_old, repeated_compare, repeated_new 13 integer :: status, default_kind_coarray[*], coindexed_status[*], extra_arg, repeated_status, status_array(10) 14 integer(kind=1) :: kind1_coarray[*], old_kind1, compare_kind1, new_kind1 15 real :: non_integer_coarray[*], non_int_or_logical 16 logical(kind=atomic_logical_kind) :: logical_scalar_coarray[*], non_scalar_logical_coarray(10)[*], non_coarray_logical 17 logical(kind=atomic_logical_kind) :: old_logical, compare_logical, new_logical, non_scalar_logical(10) 18 logical(kind=1) :: kind1_logical_coarray[*], old_logical_kind1, compare_logical_kind1, new_logical_kind1 19 logical :: non_integer, default_kind_logical_coarray[*] 20 21 !___ standard-conforming calls ___ 22 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int) 23 call atomic_cas(int_scalar_coarray[1], old_int, compare_int, new_int) 24 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, status) 25 call atomic_cas(int_scalar_coarray[1], old_int, compare_int, new_int, status) 26 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, stat=status) 27 call atomic_cas(int_scalar_coarray, old_int, compare_int, new=new_int, stat=status) 28 call atomic_cas(int_scalar_coarray, old_int, compare=compare_int, new=new_int, stat=status) 29 call atomic_cas(int_scalar_coarray, old=old_int, compare=compare_int, new=new_int, stat=status) 30 call atomic_cas(atom=int_scalar_coarray, old=old_int, compare=compare_int, new=new_int) 31 call atomic_cas(atom=int_scalar_coarray, old=old_int, compare=compare_int, new=new_int, stat=status) 32 call atomic_cas(new=new_int, old=old_int, atom=int_scalar_coarray, stat=status, compare=compare_int) 33 34 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical, new_logical) 35 call atomic_cas(logical_scalar_coarray[1], old_logical, compare_logical, new_logical) 36 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical, new_logical, status) 37 call atomic_cas(logical_scalar_coarray[1], old_logical, compare_logical, new_logical, status) 38 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical, new_logical, stat=status) 39 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical, new=new_logical, stat=status) 40 call atomic_cas(logical_scalar_coarray, old_logical, compare=compare_logical, new=new_logical, stat=status) 41 call atomic_cas(logical_scalar_coarray, old=old_logical, compare=compare_logical, new=new_logical, stat=status) 42 call atomic_cas(atom=logical_scalar_coarray, old=old_logical, compare=compare_logical, new=new_logical) 43 call atomic_cas(atom=logical_scalar_coarray, old=old_logical, compare=compare_logical, new=new_logical, stat=status) 44 call atomic_cas(new=new_logical, old=old_logical, atom=logical_scalar_coarray, stat=status, compare=compare_logical) 45 46 !___ non-standard-conforming calls ___ 47 48! mismatches where 'atom' is not a scalar coarray or coindexed object 49 50 !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_cas' 51 call atomic_cas(non_scalar_coarray, old_int, compare_int, new_int) 52 53 !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_cas' 54 call atomic_cas(non_scalar_coarray[1], old_int, compare_int, new_int) 55 56 !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_cas' 57 call atomic_cas(non_scalar_logical_coarray, old_logical, compare_logical, new_logical) 58 59 !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_cas' 60 call atomic_cas(non_scalar_logical_coarray[1], old_logical, compare_logical, new_logical) 61 62 !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_cas' 63 call atomic_cas(non_coarray, old_int, compare_int, new_int) 64 65 !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_cas' 66 call atomic_cas(non_coarray_logical, old_logical, compare_logical, new_logical) 67 68 !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_cas' 69 call atomic_cas(array, old_int, compare_int, new_int) 70 71! mismatches where 'atom' has wrong kind 72 73 !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind, but is 'INTEGER(4)' 74 call atomic_cas(default_kind_coarray, old_int, compare_int, new_int) 75 76 !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind, but is 'INTEGER(1)' 77 call atomic_cas(kind1_coarray, old_int, compare_int, new_int) 78 79 !ERROR: Actual argument for 'atom=' must have kind=atomic_logical_kind, but is 'LOGICAL(4)' 80 call atomic_cas(default_kind_logical_coarray, old_logical, compare_logical, new_logical) 81 82 !ERROR: Actual argument for 'atom=' must have kind=atomic_logical_kind, but is 'LOGICAL(1)' 83 call atomic_cas(kind1_logical_coarray, old_logical, compare_logical, new_logical) 84 85! mismatch where 'atom' has wrong type 86 87 !ERROR: Actual argument for 'atom=' has bad type 'REAL(4)' 88 call atomic_cas(non_integer_coarray, old_int, compare_int, new_int) 89 90! mismatches where 'old', 'compare', 'new' arguments don't match type of 'atom' 91 92 !ERROR: Actual argument for 'old=' must have same type and kind as 'atom=', but is 'LOGICAL(8)' 93 call atomic_cas(int_scalar_coarray, old_logical, compare_int, new_int) 94 95 !ERROR: Actual argument for 'compare=' must have same type and kind as 'atom=', but is 'LOGICAL(8)' 96 call atomic_cas(int_scalar_coarray, old_int, compare_logical, new_int) 97 98 !ERROR: Actual argument for 'new=' must have same type and kind as 'atom=', but is 'LOGICAL(8)' 99 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_logical) 100 101 !ERROR: Actual argument for 'old=' must have same type and kind as 'atom=', but is 'INTEGER(8)' 102 call atomic_cas(logical_scalar_coarray, old_int, compare_logical, new_logical) 103 104 !ERROR: Actual argument for 'compare=' must have same type and kind as 'atom=', but is 'INTEGER(8)' 105 call atomic_cas(logical_scalar_coarray, old_logical, compare_int, new_logical) 106 107 !ERROR: Actual argument for 'new=' must have same type and kind as 'atom=', but is 'INTEGER(8)' 108 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical, new_int) 109 110! mismatches where 'old', 'compare', 'new' arguments matches type of 'atom' but doesn't match kind of 'atom' 111 112 !ERROR: Actual argument for 'old=' must have same type and kind as 'atom=', but is 'INTEGER(1)' 113 call atomic_cas(int_scalar_coarray, old_kind1, compare_int, new_int) 114 115 !ERROR: Actual argument for 'compare=' must have same type and kind as 'atom=', but is 'INTEGER(1)' 116 call atomic_cas(int_scalar_coarray, old_int, compare_kind1, new_int) 117 118 !ERROR: Actual argument for 'new=' must have same type and kind as 'atom=', but is 'INTEGER(1)' 119 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_kind1) 120 121 !ERROR: Actual argument for 'old=' must have same type and kind as 'atom=', but is 'LOGICAL(1)' 122 call atomic_cas(logical_scalar_coarray, old_logical_kind1, compare_logical, new_logical) 123 124 !ERROR: Actual argument for 'compare=' must have same type and kind as 'atom=', but is 'LOGICAL(1)' 125 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical_kind1, new_logical) 126 127 !ERROR: Actual argument for 'new=' must have same type and kind as 'atom=', but is 'LOGICAL(1)' 128 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical, new_logical_kind1) 129 130! mismatches where 'old', 'compare', 'new' arguments have incorrect rank 131 132 !ERROR: 'old=' argument has unacceptable rank 1 133 call atomic_cas(int_scalar_coarray, non_scalar_int, compare_int, new_int) 134 135 !ERROR: 'compare=' argument has unacceptable rank 1 136 call atomic_cas(int_scalar_coarray, old_int, non_scalar_int, new_int) 137 138 !ERROR: 'new=' argument has unacceptable rank 1 139 call atomic_cas(int_scalar_coarray, old_int, compare_int, non_scalar_int) 140 141 !ERROR: 'old=' argument has unacceptable rank 1 142 call atomic_cas(logical_scalar_coarray, non_scalar_logical, compare_logical, new_logical) 143 144 !ERROR: 'compare=' argument has unacceptable rank 1 145 call atomic_cas(logical_scalar_coarray, old_logical, non_scalar_logical, new_logical) 146 147 !ERROR: 'new=' argument has unacceptable rank 1 148 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical, non_scalar_logical) 149 150! mismatches where 'old', 'compare', 'new' arguments have incorrect type 151 152 !ERROR: Actual argument for 'old=' has bad type 'REAL(4)' 153 call atomic_cas(int_scalar_coarray, non_int_or_logical, compare_int, new_int) 154 155 !ERROR: Actual argument for 'compare=' has bad type 'REAL(4)' 156 call atomic_cas(int_scalar_coarray, old_int, non_int_or_logical, new_int) 157 158 !ERROR: Actual argument for 'new=' has bad type 'REAL(4)' 159 call atomic_cas(int_scalar_coarray, old_int, compare_int, non_int_or_logical) 160 161 !ERROR: Actual argument for 'old=' has bad type 'REAL(4)' 162 call atomic_cas(logical_scalar_coarray, non_int_or_logical, compare_logical, new_logical) 163 164 !ERROR: Actual argument for 'compare=' has bad type 'REAL(4)' 165 call atomic_cas(logical_scalar_coarray, old_logical, non_int_or_logical, new_logical) 166 167 !ERROR: Actual argument for 'new=' has bad type 'REAL(4)' 168 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical, non_int_or_logical) 169 170! mismatches on 'stat' argument 171 172 !ERROR: Actual argument for 'stat=' has bad type 'LOGICAL(4)' 173 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, non_integer) 174 175 !ERROR: 'stat=' argument has unacceptable rank 1 176 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, status_array) 177 178 !ERROR: 'stat' argument to 'atomic_cas' may not be a coindexed object 179 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, coindexed_status[1]) 180 181 !ERROR: Actual argument associated with INTENT(OUT) dummy argument 'stat=' is not definable 182 !BECAUSE: '1_4' is not a variable or pointer 183 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, 1) 184 185! missing mandatory arguments 186 187 !ERROR: missing mandatory 'atom=' argument 188 call atomic_cas() 189 190 !ERROR: missing mandatory 'atom=' argument 191 call atomic_cas(old=old_int, compare=compare_int, new=new_int, stat=status) 192 193 !ERROR: missing mandatory 'old=' argument 194 call atomic_cas(atom=int_scalar_coarray, compare=compare_int, new=new_int, stat=status) 195 196 !ERROR: missing mandatory 'compare=' argument 197 call atomic_cas(atom=int_scalar_coarray, old=old_int, new=new_int, stat=status) 198 199 !ERROR: missing mandatory 'new=' argument 200 call atomic_cas(atom=int_scalar_coarray, old=old_int, compare=compare_int, stat=status) 201 202 !ERROR: missing mandatory 'new=' argument 203 call atomic_cas(int_scalar_coarray, old_int, compare_int) 204 205! too many arguments or repeated arguments 206 207 !ERROR: too many actual arguments for intrinsic 'atomic_cas' 208 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, status, extra_arg) 209 210 !ERROR: repeated keyword argument to intrinsic 'atomic_cas' 211 call atomic_cas(atom=int_scalar_coarray, atom=repeated_atom, old=old_int, compare=compare_int, new=new_int) 212 213 !ERROR: repeated keyword argument to intrinsic 'atomic_cas' 214 call atomic_cas(atom=int_scalar_coarray, old=old_int, old=repeated_old, compare=compare_int, new=new_int) 215 216 !ERROR: repeated keyword argument to intrinsic 'atomic_cas' 217 call atomic_cas(atom=int_scalar_coarray, old=old_int, compare=compare_int, compare=repeated_compare, new=new_int) 218 219 !ERROR: repeated keyword argument to intrinsic 'atomic_cas' 220 call atomic_cas(atom=int_scalar_coarray, old=old_int, compare=compare_int, new=new_int, new=repeated_new) 221 222 !ERROR: repeated keyword argument to intrinsic 'atomic_cas' 223 call atomic_cas(atom=int_scalar_coarray, old=old_int, compare=compare_int, new=new_int, stat=status, stat=repeated_status) 224 225 !ERROR: keyword argument to intrinsic 'atomic_cas' was supplied positionally by an earlier actual argument 226 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, atom=repeated_atom) 227 228 !ERROR: keyword argument to intrinsic 'atomic_cas' was supplied positionally by an earlier actual argument 229 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, old=repeated_old) 230 231 !ERROR: keyword argument to intrinsic 'atomic_cas' was supplied positionally by an earlier actual argument 232 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, compare=repeated_compare) 233 234 !ERROR: keyword argument to intrinsic 'atomic_cas' was supplied positionally by an earlier actual argument 235 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, new=repeated_new) 236 237 !ERROR: keyword argument to intrinsic 'atomic_cas' was supplied positionally by an earlier actual argument 238 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, status, stat=repeated_status) 239 240! typo in keyword arguments 241 242 !ERROR: unknown keyword argument to intrinsic 'atomic_cas' 243 call atomic_cas(atomic=int_scalar_coarray, old=old_int, compare=compare_int, new=new_int, stat=status) 244 245 !ERROR: unknown keyword argument to intrinsic 'atomic_cas' 246 call atomic_cas(atom=int_scalar_coarray, ol=old_int, compare=compare_int, new=new_int, stat=status) 247 248 !ERROR: unknown keyword argument to intrinsic 'atomic_cas' 249 call atomic_cas(atom=int_scalar_coarray, old=old_int, comp=compare_int, new=new_int, stat=status) 250 251 !ERROR: unknown keyword argument to intrinsic 'atomic_cas' 252 call atomic_cas(atom=int_scalar_coarray, old=old_int, compare=compare_int, nw=new_int, stat=status) 253 254 !ERROR: unknown keyword argument to intrinsic 'atomic_cas' 255 call atomic_cas(atom=int_scalar_coarray, old=old_int, compare=compare_int, new=new_int, status=status) 256 257end program test_atomic_cas 258