xref: /llvm-project/flang/test/Semantics/atomic07.f90 (revision 512b44d5e1534ef60b5db7a99818e1021cf6064c)
1183f1b56SKatherine Rasmussen! RUN: %python %S/test_errors.py %s %flang_fc1
2183f1b56SKatherine Rasmussen! This test checks for semantic errors in atomic_fetch_or subroutine calls based on
3183f1b56SKatherine Rasmussen! the interface defined in section 16.9.26 of the Fortran 2018 standard.
4183f1b56SKatherine Rasmussen
5183f1b56SKatherine Rasmussenprogram test_atomic_fetch_or
6183f1b56SKatherine Rasmussen  use iso_fortran_env, only: atomic_int_kind
7*512b44d5SPeter Klausler  implicit none(external, type)
8183f1b56SKatherine Rasmussen
9183f1b56SKatherine Rasmussen  integer(kind=atomic_int_kind) :: scalar_coarray[*], non_scalar_coarray(10)[*], val, old_val, non_coarray
10aa1a2ffdSKatherine Rasmussen  integer(kind=atomic_int_kind) :: repeated_atom[*], repeated_old, repeated_val, array(10), val_coarray[*], old_val_coarray[*]
11aa1a2ffdSKatherine Rasmussen  integer :: status, default_kind_coarray[*], not_same_kind_as_atom, coindexed_status[*]
12aa1a2ffdSKatherine Rasmussen  integer :: extra_arg, repeated_status, status_array(10)
13183f1b56SKatherine Rasmussen  integer(kind=1) :: kind1_coarray[*]
14183f1b56SKatherine Rasmussen  real :: non_integer_coarray[*], not_same_type_as_atom
15183f1b56SKatherine Rasmussen  logical :: non_integer
16183f1b56SKatherine Rasmussen
17183f1b56SKatherine Rasmussen  !___ standard-conforming calls ___
18183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val)
19183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray[1], val, old_val)
20183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val, status)
21183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray[1], val, old_val, status)
22183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, value=val, old=old_val, stat=status)
23183f1b56SKatherine Rasmussen  call atomic_fetch_or(stat=status, old=old_val, value=val, atom=scalar_coarray)
24183f1b56SKatherine Rasmussen
25183f1b56SKatherine Rasmussen  !___ non-standard-conforming calls ___
26183f1b56SKatherine Rasmussen
27aa1a2ffdSKatherine Rasmussen  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_fetch_or'
28183f1b56SKatherine Rasmussen  call atomic_fetch_or(non_scalar_coarray, val, old_val)
29183f1b56SKatherine Rasmussen
30aa1a2ffdSKatherine Rasmussen  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_fetch_or'
31183f1b56SKatherine Rasmussen  call atomic_fetch_or(non_coarray, val, old_val)
32183f1b56SKatherine Rasmussen
33aa1a2ffdSKatherine Rasmussen  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_fetch_or'
34183f1b56SKatherine Rasmussen  call atomic_fetch_or(array, val, old_val)
35183f1b56SKatherine Rasmussen
36aa1a2ffdSKatherine Rasmussen  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_fetch_or'
37aa1a2ffdSKatherine Rasmussen  call atomic_fetch_or(non_scalar_coarray[1], val, old_val)
38aa1a2ffdSKatherine Rasmussen
39183f1b56SKatherine Rasmussen  !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind, but is 'INTEGER(4)'
40183f1b56SKatherine Rasmussen  call atomic_fetch_or(default_kind_coarray, val, old_val)
41183f1b56SKatherine Rasmussen
42183f1b56SKatherine Rasmussen  !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind, but is 'INTEGER(1)'
43183f1b56SKatherine Rasmussen  call atomic_fetch_or(kind1_coarray, val, old_val)
44183f1b56SKatherine Rasmussen
45183f1b56SKatherine Rasmussen  !ERROR: Actual argument for 'atom=' has bad type 'REAL(4)'
46183f1b56SKatherine Rasmussen  call atomic_fetch_or(non_integer_coarray, val, old_val)
47183f1b56SKatherine Rasmussen
48183f1b56SKatherine Rasmussen  !ERROR: 'value=' argument has unacceptable rank 1
49183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, array, old_val)
50183f1b56SKatherine Rasmussen
51183f1b56SKatherine Rasmussen  !ERROR: Actual argument for 'value=' has bad type 'LOGICAL(4)'
52183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, non_integer, old_val)
53183f1b56SKatherine Rasmussen
54183f1b56SKatherine Rasmussen  !ERROR: Actual argument for 'old=' must have kind=atomic_int_kind, but is 'INTEGER(4)'
55183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, value=val, old=not_same_kind_as_atom)
56183f1b56SKatherine Rasmussen
57183f1b56SKatherine Rasmussen  !ERROR: Actual argument for 'old=' has bad type 'REAL(4)'
58183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, value=val, old=not_same_type_as_atom)
59183f1b56SKatherine Rasmussen
60183f1b56SKatherine Rasmussen  !ERROR: Actual argument for 'old=' must have kind=atomic_int_kind, but is 'INTEGER(4)'
61183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, 1)
62183f1b56SKatherine Rasmussen
63183f1b56SKatherine Rasmussen  !ERROR: 'old=' argument has unacceptable rank 1
64183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, array)
65183f1b56SKatherine Rasmussen
66183f1b56SKatherine Rasmussen  !ERROR: Actual argument for 'stat=' has bad type 'LOGICAL(4)'
67183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val, non_integer)
68183f1b56SKatherine Rasmussen
69183f1b56SKatherine Rasmussen  !ERROR: 'stat=' argument has unacceptable rank 1
70183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val, status_array)
71183f1b56SKatherine Rasmussen
72aa1a2ffdSKatherine Rasmussen  !ERROR: 'stat' argument to 'atomic_fetch_or' may not be a coindexed object
73183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val, coindexed_status[1])
74183f1b56SKatherine Rasmussen
75aa1a2ffdSKatherine Rasmussen  !ERROR: 'stat' argument to 'atomic_fetch_or' may not be a coindexed object
76aa1a2ffdSKatherine Rasmussen  call atomic_fetch_or(scalar_coarray[1], val_coarray[1], old_val_coarray[1], coindexed_status[1])
77aa1a2ffdSKatherine Rasmussen
78573fc618SPeter Klausler  !ERROR: Actual argument associated with INTENT(OUT) dummy argument 'stat=' is not definable
79573fc618SPeter Klausler  !BECAUSE: '1_4' is not a variable or pointer
80183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val, 1)
81183f1b56SKatherine Rasmussen
82183f1b56SKatherine Rasmussen  !ERROR: missing mandatory 'atom=' argument
83183f1b56SKatherine Rasmussen  call atomic_fetch_or()
84183f1b56SKatherine Rasmussen
85183f1b56SKatherine Rasmussen  !ERROR: missing mandatory 'atom=' argument
86183f1b56SKatherine Rasmussen  call atomic_fetch_or(value=val, old=old_val, stat=status)
87183f1b56SKatherine Rasmussen
88183f1b56SKatherine Rasmussen  !ERROR: missing mandatory 'value=' argument
89183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray)
90183f1b56SKatherine Rasmussen
91183f1b56SKatherine Rasmussen  !ERROR: missing mandatory 'value=' argument
92183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, old=old_val, stat=status)
93183f1b56SKatherine Rasmussen
94183f1b56SKatherine Rasmussen  !ERROR: missing mandatory 'old=' argument
95183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val)
96183f1b56SKatherine Rasmussen
97183f1b56SKatherine Rasmussen  !ERROR: missing mandatory 'old=' argument
98183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, value=val)
99183f1b56SKatherine Rasmussen
100183f1b56SKatherine Rasmussen  !ERROR: too many actual arguments for intrinsic 'atomic_fetch_or'
101183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val, status, extra_arg)
102183f1b56SKatherine Rasmussen
103183f1b56SKatherine Rasmussen  !ERROR: repeated keyword argument to intrinsic 'atomic_fetch_or'
104183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, atom=repeated_atom, value=val, old=old_val, stat=status)
105183f1b56SKatherine Rasmussen
106183f1b56SKatherine Rasmussen  !ERROR: repeated keyword argument to intrinsic 'atomic_fetch_or'
107183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, value=val, value=repeated_val, old=old_val, stat=status)
108183f1b56SKatherine Rasmussen
109183f1b56SKatherine Rasmussen  !ERROR: repeated keyword argument to intrinsic 'atomic_fetch_or'
110183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, value=val, old=old_val, old=repeated_old, stat=status)
111183f1b56SKatherine Rasmussen
112183f1b56SKatherine Rasmussen  !ERROR: repeated keyword argument to intrinsic 'atomic_fetch_or'
113183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, value=val, old=old_val, stat=status, stat=repeated_status)
114183f1b56SKatherine Rasmussen
115183f1b56SKatherine Rasmussen  !ERROR: unknown keyword argument to intrinsic 'atomic_fetch_or'
116183f1b56SKatherine Rasmussen  call atomic_fetch_or(atomic=scalar_coarray, value=val, old=old_val, stat=status)
117183f1b56SKatherine Rasmussen
118183f1b56SKatherine Rasmussen  !ERROR: unknown keyword argument to intrinsic 'atomic_fetch_or'
119183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, values=val, old=old_val, stat=status)
120183f1b56SKatherine Rasmussen
121183f1b56SKatherine Rasmussen  !ERROR: unknown keyword argument to intrinsic 'atomic_fetch_or'
122183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, value=val, oldvalue=old_val, stat=status)
123183f1b56SKatherine Rasmussen
124183f1b56SKatherine Rasmussen  !ERROR: unknown keyword argument to intrinsic 'atomic_fetch_or'
125183f1b56SKatherine Rasmussen  call atomic_fetch_or(atom=scalar_coarray, value=val, old=old_val, status=status)
126183f1b56SKatherine Rasmussen
127183f1b56SKatherine Rasmussen  !ERROR: keyword argument to intrinsic 'atomic_fetch_or' was supplied positionally by an earlier actual argument
128183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val, atom=repeated_atom)
129183f1b56SKatherine Rasmussen
130183f1b56SKatherine Rasmussen  !ERROR: keyword argument to intrinsic 'atomic_fetch_or' was supplied positionally by an earlier actual argument
131aa1a2ffdSKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val, value=repeated_val)
132183f1b56SKatherine Rasmussen
133183f1b56SKatherine Rasmussen  !ERROR: keyword argument to intrinsic 'atomic_fetch_or' was supplied positionally by an earlier actual argument
134183f1b56SKatherine Rasmussen  call atomic_fetch_or(scalar_coarray, val, old_val, status, stat=repeated_status)
135183f1b56SKatherine Rasmussen
136183f1b56SKatherine Rasmussenend program test_atomic_fetch_or
137