1! { dg-do compile }
2! { dg-options "-fcoarray=single -std=f2008ts -fmax-errors=200" }
3!
4use iso_fortran_env, only: atomic_int_kind, atomic_logical_kind
5implicit none
6
7intrinsic :: atomic_define
8intrinsic :: atomic_ref
9intrinsic :: atomic_cas
10intrinsic :: atomic_add
11intrinsic :: atomic_and
12intrinsic :: atomic_or
13intrinsic :: atomic_xor
14intrinsic :: atomic_fetch_add
15intrinsic :: atomic_fetch_and
16intrinsic :: atomic_fetch_or
17intrinsic :: atomic_fetch_xor
18integer(atomic_int_kind) :: caf[*], var
19logical(atomic_logical_kind) :: caf_log[*], var2
20integer :: stat
21integer(1) :: var3, caf0[*]
22logical(1) :: var4, caf0_log[*]
23
24call atomic_define(caf[1], 2_2, stat=stat)
25call atomic_define(atom=caf_log[1], value=.false._2)
26call atomic_define(caf_log[1], 2) ! { dg-error "shall have the same type as 'atom'" }
27call atomic_define(var, 2_2, stat=stat) ! { dg-error "shall be a coarray or coindexed" }
28call atomic_define(caf0, 2_2, stat=stat) ! { dg-error "integer of ATOMIC_INT_KIND or a logical of ATOMIC_LOGICAL_KIND" }
29call atomic_define(var2, 2_2, stat=stat) ! { dg-error "shall be a coarray or coindexed" }
30call atomic_define(caf0_log, 2_2, stat=stat) ! { dg-error "integer of ATOMIC_INT_KIND or a logical of ATOMIC_LOGICAL_KIND" }
31
32call atomic_ref(var3, caf[1], stat=stat)
33call atomic_ref(value=var4, atom=caf_log[1])
34call atomic_ref(var, caf_log[1]) ! { dg-error "shall have the same type as 'atom'" }
35call atomic_ref(var, var) ! { dg-error "shall be a coarray or coindexed" }
36call atomic_ref(var, caf0) ! { dg-error "integer of ATOMIC_INT_KIND or a logical of ATOMIC_LOGICAL_KIND" }
37call atomic_ref(var, caf0_log) ! { dg-error "integer of ATOMIC_INT_KIND or a logical of ATOMIC_LOGICAL_KIND" }
38
39call atomic_cas(caf[1], var, 2_4, 1_1, stat=stat)
40call atomic_cas(caf[1], var, 2_2, 1_1, stat=stat) ! { dg-error "'compare' argument of 'atomic_cas' intrinsic at .1. must be the same type and kind as 'atom'" }
41call atomic_cas(caf[1], var3, 2_2, 1_1, stat=stat) ! { dg-error "'old' argument of 'atomic_cas' intrinsic at .1. must be the same type and kind as 'atom'" }
42call atomic_cas(caf[1], var3, 2_4, .false._4, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
43call atomic_cas(caf0[1], var, 2_4, 1_1, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND or a logical of ATOMIC_LOGICAL_KIND" }
44call atomic_cas(var, var, 2_4, 1_1, stat=stat) ! { dg-error "shall be a coarray or coindexed" }
45call atomic_cas(caf_log[1], var2, .true._4, .false._1, stat=stat)
46call atomic_cas(caf_log[1], var2, .true._2, .false._1, stat=stat) ! { dg-error "'compare' argument of 'atomic_cas' intrinsic at .1. must be the same type and kind as 'atom'" }
47call atomic_cas(caf_log[1], var4, .true._4, .false._1, stat=stat) ! { dg-error "'old' argument of 'atomic_cas' intrinsic at .1. must be the same type and kind as 'atom'" }
48call atomic_cas(caf_log[1], var4, .true._4, 4_4, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
49call atomic_cas(atom=caf0_log[1], old=var4, compare=.true._4, new=.false._4, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND or a logical of ATOMIC_LOGICAL_KIND" }
50call atomic_cas(var2, var4, .true._4, .false._4, stat=stat) ! { dg-error "shall be a coarray or coindexed" }
51call atomic_cas(caf[1], var, 2_4, 1_1, stat=var3) ! { dg-error "'stat' argument of 'atomic_cas' intrinsic at .1. must be of kind 4" }
52
53call atomic_add(atom=caf, value=2_4, stat=stat)
54call atomic_add(caf, 2_2, stat=stat)
55call atomic_add(caf, .false._2, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
56call atomic_add(caf_log, .false._2, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND" }
57call atomic_add(var, 34._4) ! { dg-error "shall be a coarray or coindexed" }
58call atomic_add(atom=caf, value=2_4, stat=var3) ! { dg-error "'stat' argument of 'atomic_add' intrinsic at .1. must be of kind 4" }
59
60call atomic_and(caf, 2_4, stat=stat)
61call atomic_and(atom=caf, value=2_2, stat=stat)
62call atomic_and(caf, .false._2, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
63call atomic_and(caf_log, .false._2, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND" }
64call atomic_and(var, 34._4) ! { dg-error "shall be a coarray or coindexed" }
65call atomic_and(caf, 2_4, stat=var3) ! { dg-error "'stat' argument of 'atomic_and' intrinsic at .1. must be of kind 4" }
66
67call atomic_or(caf, value=2_4, stat=stat)
68call atomic_or(atom=caf, value=2_2, stat=stat)
69call atomic_or(caf, .false._2, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
70call atomic_or(caf_log, .false._2, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND" }
71call atomic_or(var, 34._4) ! { dg-error "shall be a coarray or coindexed" }
72call atomic_or(caf, value=2_4, stat=var3) ! { dg-error "'stat' argument of 'atomic_or' intrinsic at .1. must be of kind 4" }
73
74call atomic_xor(caf, 2_4, stat=stat)
75call atomic_xor(atom=caf, value=2_2, stat=stat)
76call atomic_xor(caf, .false._2, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
77call atomic_xor(caf_log, .false._2, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND" }
78call atomic_xor(var, 34._4) ! { dg-error "shall be a coarray or coindexed" }
79call atomic_xor(caf, 2_4, stat=var3) ! { dg-error "'stat' argument of 'atomic_xor' intrinsic at .1. must be of kind 4" }
80
81call atomic_fetch_add(atom=caf, value=2_4, old=var, stat=stat)
82call atomic_fetch_add(caf, 2_2, var)
83call atomic_fetch_add(caf, .false._2, var, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
84call atomic_fetch_add(caf_log, .false._2, var2, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND" }
85call atomic_fetch_add(var, 34._4, var) ! { dg-error "shall be a coarray or coindexed" }
86call atomic_fetch_add(caf, 2_2, var3) ! { dg-error "must be the same type and kind as 'atom'" }
87call atomic_fetch_add(atom=caf, value=2_4, old=var, stat=var3) ! { dg-error "'stat' argument of 'atomic_fetch_add' intrinsic at .1. must be of kind 4" }
88
89call atomic_fetch_and(atom=caf, value=2_4, old=var, stat=stat)
90call atomic_fetch_and(caf, 2_2, var)
91call atomic_fetch_and(caf, .false._2, var, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
92call atomic_fetch_and(caf_log, .false._2, var2, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND" }
93call atomic_fetch_and(var, 34._4, var) ! { dg-error "shall be a coarray or coindexed" }
94call atomic_fetch_and(caf, 2_2, var3) ! { dg-error "must be the same type and kind as 'atom'" }
95call atomic_fetch_and(atom=caf, value=2_4, old=var, stat=var3) ! { dg-error "'stat' argument of 'atomic_fetch_and' intrinsic at .1. must be of kind 4" }
96
97call atomic_fetch_or(atom=caf, value=2_4, old=var, stat=stat)
98call atomic_fetch_or(caf, 2_2, var)
99call atomic_fetch_or(caf, .false._2, var, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
100call atomic_fetch_or(caf_log, .false._2, var2, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND" }
101call atomic_fetch_or(var, 34._4, var) ! { dg-error "shall be a coarray or coindexed" }
102call atomic_fetch_or(caf, 2_2, var3) ! { dg-error "must be the same type and kind as 'atom'" }
103call atomic_fetch_or(atom=caf, value=2_4, old=var, stat=var3) ! { dg-error "'stat' argument of 'atomic_fetch_or' intrinsic at .1. must be of kind 4" }
104
105call atomic_fetch_xor(atom=caf, value=2_4, old=var, stat=stat)
106call atomic_fetch_xor(caf, 2_2, var)
107call atomic_fetch_xor(caf, .false._2, var, stat=stat) ! { dg-error "shall have the same type as 'atom'" }
108call atomic_fetch_xor(caf_log, .false._2, var2, stat=stat) ! { dg-error "shall be an integer of ATOMIC_INT_KIND" }
109call atomic_fetch_xor(var, 34._4, var) ! { dg-error "shall be a coarray or coindexed" }
110call atomic_fetch_xor(caf, 2_2, var3) ! { dg-error "must be the same type and kind as 'atom'" }
111call atomic_fetch_xor(atom=caf, value=2_4, old=var, stat=var3) ! { dg-error "'stat' argument of 'atomic_fetch_xor' intrinsic at .1. must be of kind 4" }
112end
113