brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.9 KiB · cef21d0 Raw
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