xref: /llvm-project/flang/test/Semantics/atomic06.f90 (revision 512b44d5e1534ef60b5db7a99818e1021cf6064c)
1e4ee56b4SKatherine Rasmussen! RUN: %python %S/test_errors.py %s %flang_fc1
2e4ee56b4SKatherine Rasmussen! This test checks for semantic errors in atomic_fetch_and subroutine calls based on
3e4ee56b4SKatherine Rasmussen! the interface defined in section 16.9.25 of the Fortran 2018 standard.
4e4ee56b4SKatherine Rasmussen
5e4ee56b4SKatherine Rasmussenprogram test_atomic_fetch_and
634f3fa1aSKatherine Rasmussen  use iso_fortran_env, only: atomic_int_kind, atomic_logical_kind
7*512b44d5SPeter Klausler  implicit none(external, type)
8e4ee56b4SKatherine Rasmussen
9e4ee56b4SKatherine Rasmussen  integer(kind=atomic_int_kind) :: scalar_coarray[*], non_scalar_coarray(10)[*], val, old_val, non_coarray
10e4ee56b4SKatherine Rasmussen  integer(kind=atomic_int_kind) :: repeated_atom[*], repeated_old, repeated_val, array(10)
1134f3fa1aSKatherine Rasmussen  integer :: status, default_kind_coarray[*], not_same_kind_as_atom, coindexed_status[*]
1234f3fa1aSKatherine Rasmussen  integer :: extra_arg, repeated_status, status_array(10)
13e4ee56b4SKatherine Rasmussen  integer(kind=1) :: kind1_coarray[*]
14e4ee56b4SKatherine Rasmussen  real :: non_integer_coarray[*], not_same_type_as_atom
15e4ee56b4SKatherine Rasmussen  logical :: non_integer
1634f3fa1aSKatherine Rasmussen  logical(kind=atomic_logical_kind) :: atomic_logical[*], old_logical
17e4ee56b4SKatherine Rasmussen
18e4ee56b4SKatherine Rasmussen  !___ standard-conforming calls ___
19e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val)
20e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray[1], val, old_val)
21e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val, status)
22e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray[1], val, old_val, status)
23e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, value=val, old=old_val, stat=status)
24e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(stat=status, old=old_val, value=val, atom=scalar_coarray)
25e4ee56b4SKatherine Rasmussen
26e4ee56b4SKatherine Rasmussen  !___ non-standard-conforming calls ___
27e4ee56b4SKatherine Rasmussen
2834f3fa1aSKatherine Rasmussen  !ERROR: Actual argument for 'atom=' has bad type 'LOGICAL(8)'
2934f3fa1aSKatherine Rasmussen  call atomic_fetch_and(atomic_logical, val, old_logical)
3034f3fa1aSKatherine Rasmussen
3134f3fa1aSKatherine Rasmussen  !ERROR: Actual argument for 'old=' has bad type 'LOGICAL(8)'
3234f3fa1aSKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_logical)
3334f3fa1aSKatherine Rasmussen
3434f3fa1aSKatherine Rasmussen  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_fetch_and'
35e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(non_scalar_coarray, val, old_val)
36e4ee56b4SKatherine Rasmussen
3734f3fa1aSKatherine Rasmussen  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_fetch_and'
38e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(non_coarray, val, old_val)
39e4ee56b4SKatherine Rasmussen
4034f3fa1aSKatherine Rasmussen  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_fetch_and'
41e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(array, val, old_val)
42e4ee56b4SKatherine Rasmussen
4334f3fa1aSKatherine Rasmussen  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_fetch_and'
4434f3fa1aSKatherine Rasmussen  call atomic_fetch_and(non_scalar_coarray[1], val, old_val)
4534f3fa1aSKatherine Rasmussen
46e4ee56b4SKatherine Rasmussen  !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind, but is 'INTEGER(4)'
47e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(default_kind_coarray, val, old_val)
48e4ee56b4SKatherine Rasmussen
49e4ee56b4SKatherine Rasmussen  !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind, but is 'INTEGER(1)'
50e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(kind1_coarray, val, old_val)
51e4ee56b4SKatherine Rasmussen
52e4ee56b4SKatherine Rasmussen  !ERROR: Actual argument for 'atom=' has bad type 'REAL(4)'
53e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(non_integer_coarray, val, old_val)
54e4ee56b4SKatherine Rasmussen
55e4ee56b4SKatherine Rasmussen  !ERROR: 'value=' argument has unacceptable rank 1
56e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, array, old_val)
57e4ee56b4SKatherine Rasmussen
58e4ee56b4SKatherine Rasmussen  !ERROR: Actual argument for 'value=' has bad type 'LOGICAL(4)'
59e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, non_integer, old_val)
60e4ee56b4SKatherine Rasmussen
61e4ee56b4SKatherine Rasmussen  !ERROR: Actual argument for 'old=' must have kind=atomic_int_kind, but is 'INTEGER(4)'
62e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, value=val, old=not_same_kind_as_atom)
63e4ee56b4SKatherine Rasmussen
64e4ee56b4SKatherine Rasmussen  !ERROR: Actual argument for 'old=' has bad type 'REAL(4)'
65e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, value=val, old=not_same_type_as_atom)
66e4ee56b4SKatherine Rasmussen
67e4ee56b4SKatherine Rasmussen  !ERROR: Actual argument for 'old=' must have kind=atomic_int_kind, but is 'INTEGER(4)'
68e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, 1)
69e4ee56b4SKatherine Rasmussen
70e4ee56b4SKatherine Rasmussen  !ERROR: 'old=' argument has unacceptable rank 1
71e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, array)
72e4ee56b4SKatherine Rasmussen
73e4ee56b4SKatherine Rasmussen  !ERROR: Actual argument for 'stat=' has bad type 'LOGICAL(4)'
74e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val, non_integer)
75e4ee56b4SKatherine Rasmussen
76e4ee56b4SKatherine Rasmussen  !ERROR: 'stat=' argument has unacceptable rank 1
77e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val, status_array)
78e4ee56b4SKatherine Rasmussen
7934f3fa1aSKatherine Rasmussen  !ERROR: 'stat' argument to 'atomic_fetch_and' may not be a coindexed object
80e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val, coindexed_status[1])
81e4ee56b4SKatherine Rasmussen
82573fc618SPeter Klausler  !ERROR: Actual argument associated with INTENT(OUT) dummy argument 'stat=' is not definable
83573fc618SPeter Klausler  !BECAUSE: '1_4' is not a variable or pointer
84e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val, 1)
85e4ee56b4SKatherine Rasmussen
86e4ee56b4SKatherine Rasmussen  !ERROR: missing mandatory 'atom=' argument
87e4ee56b4SKatherine Rasmussen  call atomic_fetch_and()
88e4ee56b4SKatherine Rasmussen
89e4ee56b4SKatherine Rasmussen  !ERROR: missing mandatory 'atom=' argument
90e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(value=val, old=old_val, stat=status)
91e4ee56b4SKatherine Rasmussen
92e4ee56b4SKatherine Rasmussen  !ERROR: missing mandatory 'value=' argument
93e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray)
94e4ee56b4SKatherine Rasmussen
95e4ee56b4SKatherine Rasmussen  !ERROR: missing mandatory 'value=' argument
96e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, old=old_val, stat=status)
97e4ee56b4SKatherine Rasmussen
98e4ee56b4SKatherine Rasmussen  !ERROR: missing mandatory 'old=' argument
99e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val)
100e4ee56b4SKatherine Rasmussen
101e4ee56b4SKatherine Rasmussen  !ERROR: missing mandatory 'old=' argument
102e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, value=val)
103e4ee56b4SKatherine Rasmussen
104e4ee56b4SKatherine Rasmussen  !ERROR: too many actual arguments for intrinsic 'atomic_fetch_and'
105e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val, status, extra_arg)
106e4ee56b4SKatherine Rasmussen
107e4ee56b4SKatherine Rasmussen  !ERROR: repeated keyword argument to intrinsic 'atomic_fetch_and'
108e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, atom=repeated_atom, value=val, old=old_val, stat=status)
109e4ee56b4SKatherine Rasmussen
110e4ee56b4SKatherine Rasmussen  !ERROR: repeated keyword argument to intrinsic 'atomic_fetch_and'
111e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, value=val, value=repeated_val, old=old_val, stat=status)
112e4ee56b4SKatherine Rasmussen
113e4ee56b4SKatherine Rasmussen  !ERROR: repeated keyword argument to intrinsic 'atomic_fetch_and'
114e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, value=val, old=old_val, old=repeated_old, stat=status)
115e4ee56b4SKatherine Rasmussen
116e4ee56b4SKatherine Rasmussen  !ERROR: repeated keyword argument to intrinsic 'atomic_fetch_and'
117e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, value=val, old=old_val, stat=status, stat=repeated_status)
118e4ee56b4SKatherine Rasmussen
119e4ee56b4SKatherine Rasmussen  !ERROR: unknown keyword argument to intrinsic 'atomic_fetch_and'
120e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atomic=scalar_coarray, value=val, old=old_val, stat=status)
121e4ee56b4SKatherine Rasmussen
122e4ee56b4SKatherine Rasmussen  !ERROR: unknown keyword argument to intrinsic 'atomic_fetch_and'
123e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, values=val, old=old_val, stat=status)
124e4ee56b4SKatherine Rasmussen
125e4ee56b4SKatherine Rasmussen  !ERROR: unknown keyword argument to intrinsic 'atomic_fetch_and'
126e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, value=val, oldvalue=old_val, stat=status)
127e4ee56b4SKatherine Rasmussen
128e4ee56b4SKatherine Rasmussen  !ERROR: unknown keyword argument to intrinsic 'atomic_fetch_and'
129e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(atom=scalar_coarray, value=val, old=old_val, status=status)
130e4ee56b4SKatherine Rasmussen
131e4ee56b4SKatherine Rasmussen  !ERROR: keyword argument to intrinsic 'atomic_fetch_and' was supplied positionally by an earlier actual argument
132e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val, atom=repeated_atom)
133e4ee56b4SKatherine Rasmussen
134e4ee56b4SKatherine Rasmussen  !ERROR: keyword argument to intrinsic 'atomic_fetch_and' was supplied positionally by an earlier actual argument
135e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val, value=repeated_val)
136e4ee56b4SKatherine Rasmussen
137e4ee56b4SKatherine Rasmussen  !ERROR: keyword argument to intrinsic 'atomic_fetch_and' was supplied positionally by an earlier actual argument
138e4ee56b4SKatherine Rasmussen  call atomic_fetch_and(scalar_coarray, val, old_val, status, stat=repeated_status)
139e4ee56b4SKatherine Rasmussen
140e4ee56b4SKatherine Rasmussenend program test_atomic_fetch_and
141