File: atomic10.f90

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (152 lines) | stat: -rw-r--r-- 7,119 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
! RUN: %python %S/test_errors.py %s %flang_fc1
! This test checks for semantic errors in atomic_ref subroutine calls based on
! the interface defined in section 16.9.29 of the Fortran 2018 standard.

program test_atomic_ref
  use iso_fortran_env, only: atomic_int_kind, atomic_logical_kind
  implicit none

  integer(kind=atomic_int_kind) :: scalar_coarray[*], non_scalar_coarray(10)[*], val, non_coarray
  integer(kind=atomic_int_kind) :: repeated_atom[*], repeated_val, array(10)
  integer :: status, default_kind_coarray[*], coindexed_status[*], extra_arg, repeated_status, status_array(10), default_int_val
  real :: non_integer_coarray[*], non_int_or_logical
  logical(kind=atomic_logical_kind) :: atom_logical[*], val_logical, non_scalar_logical_coarray(10)[*], non_coarray_logical
  logical :: non_integer, default_kind_logical_coarray[*], default_logical_val

  ! These variables are used in this test based on the assumption that atomic_int_kind is not equal to kind=1
  ! This is true at the time of writing of the test, but of course is not guaranteed to stay the same
  integer(kind=1) :: kind1_coarray[*]
  logical(kind=1) :: kind1_logical_coarray[*]

  !___ standard-conforming calls ___
  call atomic_ref(val, scalar_coarray)
  call atomic_ref(default_int_val, scalar_coarray)
  call atomic_ref(val, scalar_coarray[1])
  call atomic_ref(default_int_val, scalar_coarray, status)
  call atomic_ref(val, scalar_coarray[1], status)
  call atomic_ref(default_int_val, scalar_coarray, stat=status)
  call atomic_ref(val, atom=scalar_coarray, stat=status)
  call atomic_ref(value=default_int_val, atom=scalar_coarray)
  call atomic_ref(value=val, atom=scalar_coarray, stat=status)
  call atomic_ref(stat=status, atom=scalar_coarray, value=default_int_val)

  call atomic_ref(val_logical, atom_logical)
  call atomic_ref(default_logical_val, atom_logical)
  call atomic_ref(val_logical, atom_logical[1])
  call atomic_ref(val_logical, atom_logical, status)
  call atomic_ref(val_logical, atom_logical[1], status)
  call atomic_ref(val_logical, atom_logical, stat=status)
  call atomic_ref(val_logical, atom=atom_logical, stat=status)
  call atomic_ref(value=val_logical, atom=atom_logical)
  call atomic_ref(value=val_logical, atom=atom_logical, stat=status)
  call atomic_ref(stat=status, atom=atom_logical, value=val_logical)

  !___ non-standard-conforming calls ___

  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_ref'
  call atomic_ref(val, non_scalar_coarray)

  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_ref'
  call atomic_ref(val, non_scalar_coarray[1])

  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_ref'
  call atomic_ref(val_logical, non_scalar_logical_coarray)

  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_ref'
  call atomic_ref(val_logical, non_scalar_logical_coarray[1])

  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_ref'
  call atomic_ref(val, non_coarray)

  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_ref'
  call atomic_ref(val_logical, non_coarray_logical)

  !ERROR: 'atom=' argument must be a scalar coarray or coindexed object for intrinsic 'atomic_ref'
  call atomic_ref(val, array)

  !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind or atomic_logical_kind, but is 'INTEGER(4)'
  call atomic_ref(val, default_kind_coarray)

  !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind or atomic_logical_kind, but is 'INTEGER(1)'
  call atomic_ref(val, kind1_coarray)

  !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind or atomic_logical_kind, but is 'LOGICAL(4)'
  call atomic_ref(val_logical, default_kind_logical_coarray)

  !ERROR: Actual argument for 'atom=' must have kind=atomic_int_kind or atomic_logical_kind, but is 'LOGICAL(1)'
  call atomic_ref(val_logical, kind1_logical_coarray)

  !ERROR: 'value=' argument to 'atomic_ref' must have same type as 'atom=', but is 'LOGICAL(8)'
  call atomic_ref(val_logical, scalar_coarray)

  !ERROR: 'value=' argument to 'atomic_ref' must have same type as 'atom=', but is 'INTEGER(8)'
  call atomic_ref(val, atom_logical)

  !ERROR: Actual argument for 'atom=' has bad type 'REAL(4)'
  call atomic_ref(val, non_integer_coarray)

  !ERROR: 'value=' argument has unacceptable rank 1
  call atomic_ref(array, scalar_coarray)

  !ERROR: Actual argument for 'value=' has bad type 'REAL(4)'
  call atomic_ref(non_int_or_logical, scalar_coarray)

  !ERROR: Actual argument for 'value=' has bad type 'REAL(4)'
  call atomic_ref(non_int_or_logical, atom_logical)

  !ERROR: Actual argument for 'stat=' has bad type 'LOGICAL(4)'
  call atomic_ref(val, scalar_coarray, non_integer)

  !ERROR: 'stat=' argument has unacceptable rank 1
  call atomic_ref(val, scalar_coarray, status_array)

  !ERROR: 'stat' argument to 'atomic_ref' may not be a coindexed object
  call atomic_ref(val, scalar_coarray, coindexed_status[1])

  !ERROR: Actual argument associated with INTENT(OUT) dummy argument 'stat=' is not definable
  !BECAUSE: '1_4' is not a variable or pointer
  call atomic_ref(val, scalar_coarray, 1)

  !ERROR: missing mandatory 'value=' argument
  call atomic_ref()

  !ERROR: missing mandatory 'value=' argument
  call atomic_ref(atom=scalar_coarray, stat=status)

  !ERROR: missing mandatory 'atom=' argument
  call atomic_ref(val)

  !ERROR: missing mandatory 'atom=' argument
  call atomic_ref(value=val, stat=status)

  !ERROR: too many actual arguments for intrinsic 'atomic_ref'
  call atomic_ref(val, scalar_coarray, status, extra_arg)

  !ERROR: repeated keyword argument to intrinsic 'atomic_ref'
  call atomic_ref(value=val, value=repeated_val, atom=scalar_coarray, stat=status)

  !ERROR: repeated keyword argument to intrinsic 'atomic_ref'
  call atomic_ref(value=val, atom=scalar_coarray, atom=repeated_atom, stat=status)

  !ERROR: repeated keyword argument to intrinsic 'atomic_ref'
  call atomic_ref(value=val, atom=scalar_coarray, stat=status, stat=repeated_status)

  !ERROR: unknown keyword argument to intrinsic 'atomic_ref'
  call atomic_ref(values=val, atom=scalar_coarray, stat=status)

  !ERROR: unknown keyword argument to intrinsic 'atomic_ref'
  call atomic_ref(value=val, atomic=scalar_coarray, stat=status)

  !ERROR: unknown keyword argument to intrinsic 'atomic_ref'
  call atomic_ref(value=val, atom=scalar_coarray, status=status)

  !ERROR: keyword argument to intrinsic 'atomic_ref' was supplied positionally by an earlier actual argument
  call atomic_ref(val, value=repeated_val, scalar_coarray)

  !ERROR: keyword argument to intrinsic 'atomic_ref' was supplied positionally by an earlier actual argument
  call atomic_ref(val, scalar_coarray, atom=repeated_atom)

  !ERROR: keyword argument to intrinsic 'atomic_ref' was supplied positionally by an earlier actual argument
  call atomic_ref(val, scalar_coarray, status, stat=repeated_status)

end program test_atomic_ref