258 lines · plain
1! RUN: %python %S/test_errors.py %s %flang_fc12! This test checks for semantic errors in atomic_cas subroutine calls based on3! the interface defined in section 16.9.22 of the Fortran 2018 standard.4 5program test_atomic_cas6 use iso_fortran_env, only: atomic_int_kind, atomic_logical_kind7 implicit none(external, type)8 9 integer(kind=atomic_int_kind) :: int_scalar_coarray[*], non_scalar_coarray(10)[*], non_coarray10 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_new13 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_kind115 real :: non_integer_coarray[*], non_int_or_logical16 logical(kind=atomic_logical_kind) :: logical_scalar_coarray[*], non_scalar_logical_coarray(10)[*], non_coarray_logical17 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_kind119 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 object49 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 kind72 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 type86 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 rank131 132 !ERROR: 'old=' argument has unacceptable rank 1133 call atomic_cas(int_scalar_coarray, non_scalar_int, compare_int, new_int)134 135 !ERROR: 'compare=' argument has unacceptable rank 1136 call atomic_cas(int_scalar_coarray, old_int, non_scalar_int, new_int)137 138 !ERROR: 'new=' argument has unacceptable rank 1139 call atomic_cas(int_scalar_coarray, old_int, compare_int, non_scalar_int)140 141 !ERROR: 'old=' argument has unacceptable rank 1142 call atomic_cas(logical_scalar_coarray, non_scalar_logical, compare_logical, new_logical)143 144 !ERROR: 'compare=' argument has unacceptable rank 1145 call atomic_cas(logical_scalar_coarray, old_logical, non_scalar_logical, new_logical)146 147 !ERROR: 'new=' argument has unacceptable rank 1148 call atomic_cas(logical_scalar_coarray, old_logical, compare_logical, non_scalar_logical)149 150! mismatches where 'old', 'compare', 'new' arguments have incorrect type151 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' argument171 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 1176 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 object179 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 definable182 !BECAUSE: '1_4' is not a variable or pointer183 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, 1)184 185! missing mandatory arguments186 187 !ERROR: missing mandatory 'atom=' argument188 call atomic_cas()189 190 !ERROR: missing mandatory 'atom=' argument191 call atomic_cas(old=old_int, compare=compare_int, new=new_int, stat=status)192 193 !ERROR: missing mandatory 'old=' argument194 call atomic_cas(atom=int_scalar_coarray, compare=compare_int, new=new_int, stat=status)195 196 !ERROR: missing mandatory 'compare=' argument197 call atomic_cas(atom=int_scalar_coarray, old=old_int, new=new_int, stat=status)198 199 !ERROR: missing mandatory 'new=' argument200 call atomic_cas(atom=int_scalar_coarray, old=old_int, compare=compare_int, stat=status)201 202 !ERROR: missing mandatory 'new=' argument203 call atomic_cas(int_scalar_coarray, old_int, compare_int)204 205! too many arguments or repeated arguments206 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 argument226 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 argument229 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 argument232 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 argument235 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 argument238 call atomic_cas(int_scalar_coarray, old_int, compare_int, new_int, status, stat=repeated_status)239 240! typo in keyword arguments241 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_cas258