offtarget 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (886) hide show
  1. offload/__init__.py +10 -0
  2. offload/__main__.py +5 -0
  3. offload/_bundle.py +74 -0
  4. offload/_root/catalog/acc/claims.yaml +197 -0
  5. offload/_root/catalog/acc/clauses.yaml +391 -0
  6. offload/_root/catalog/acc/no_oracle.yaml +89 -0
  7. offload/_root/catalog/acc/out_of_scope.yaml +17 -0
  8. offload/_root/catalog/acc/rules.yaml +433 -0
  9. offload/_root/catalog/acc/semantic_atoms.yaml +27 -0
  10. offload/_root/catalog/acc/skeleton.yaml +1567 -0
  11. offload/_root/catalog/acc/spec_overrides.yaml +72 -0
  12. offload/_root/catalog/later_forms.yaml +76 -0
  13. offload/_root/catalog/machines.yaml +218 -0
  14. offload/_root/catalog/omp/claims.yaml +2047 -0
  15. offload/_root/catalog/omp/clauses.yaml +914 -0
  16. offload/_root/catalog/omp/derivations.yaml +177 -0
  17. offload/_root/catalog/omp/memory_modes.yaml +40 -0
  18. offload/_root/catalog/omp/no_oracle.yaml +373 -0
  19. offload/_root/catalog/omp/omp50_delta.yaml +377 -0
  20. offload/_root/catalog/omp/out_of_scope.yaml +64 -0
  21. offload/_root/catalog/omp/port_equivalence.yaml +352 -0
  22. offload/_root/catalog/omp/rules.yaml +3131 -0
  23. offload/_root/catalog/omp/rules_coverage.yaml +9939 -0
  24. offload/_root/catalog/omp/semantic_atoms.yaml +34 -0
  25. offload/_root/catalog/omp/skeleton.yaml +9181 -0
  26. offload/_root/catalog/omp/spec_overrides.yaml +932 -0
  27. offload/_root/catalog/toolchains.yaml +472 -0
  28. offload/_root/catalog/vendor_claims_generic.yaml +40925 -0
  29. offload/_root/data/canuse/b.json +1 -0
  30. offload/_root/data/canuse/c.json +1 -0
  31. offload/_root/data/canuse/columns.json +1 -0
  32. offload/_root/data/canuse/d.json +1 -0
  33. offload/_root/data/canuse/f.json +1 -0
  34. offload/_root/data/canuse/index.json +1 -0
  35. offload/_root/data/canuse/p.json +1 -0
  36. offload/_root/data/compilers/afar.json +1 -0
  37. offload/_root/data/compilers/cce19.json +1 -0
  38. offload/_root/data/compilers/cce20.json +1 -0
  39. offload/_root/data/compilers/cce21.json +1 -0
  40. offload/_root/data/compilers/cce21_4.json +1 -0
  41. offload/_root/data/compilers/gcc.json +1 -0
  42. offload/_root/data/compilers/gcc_sm80.json +1 -0
  43. offload/_root/data/compilers/nvhpc.json +1 -0
  44. offload/_root/data/compilers/nvhpc269.json +1 -0
  45. offload/_root/data/findings/AUTHORING.md +107 -0
  46. offload/_root/data/findings/README.md +33 -0
  47. offload/_root/data/findings/afar-c-error-directive-in-target-link.c +37 -0
  48. offload/_root/data/findings/afar-c-lastprivate-distribute-parallel-for-small-type.c +56 -0
  49. offload/_root/data/findings/afar-c-teams-distribute-reduction-first-team.c +59 -0
  50. offload/_root/data/findings/afar-c-update-iterator-copy-mode.c +45 -0
  51. offload/_root/data/findings/afar-c-xnack1-target-is-present.c +31 -0
  52. offload/_root/data/findings/afar-cce19-character-defaultmap.f90 +27 -0
  53. offload/_root/data/findings/afar-cce19-task-in-target-ice.f90 +23 -0
  54. offload/_root/data/findings/afar-clang-requires-device-safesync-hang.c +24 -0
  55. offload/_root/data/findings/afar-flang-firstprivate-map-two-targets.f90 +34 -0
  56. offload/_root/data/findings/afar-flang-loop-bind-teams-reduction.f90 +27 -0
  57. offload/_root/data/findings/afar-flang-task-reduction-max.f90 +31 -0
  58. offload/_root/data/findings/afar-flang-thread-limit-target-parallel-do.f90 +22 -0
  59. offload/_root/data/findings/afar-linear-ref-omp50.f90 +29 -0
  60. offload/_root/data/findings/afar-loop-bind-thread-in-teams.f90 +44 -0
  61. offload/_root/data/findings/afar-nontemporal-assumed-shape-ice.f90 +38 -0
  62. offload/_root/data/findings/afar-udr-derived-type-link.f90 +41 -0
  63. offload/_root/data/findings/afar-xnack1-atomic-min-nested-parallel.f90 +53 -0
  64. offload/_root/data/findings/afar-xnack1-present-not-enforced.f90 +36 -0
  65. offload/_root/data/findings/afar-xnack1-target-is-present.f90 +47 -0
  66. offload/_root/data/findings/apps/afar-cce-teams-private-array-nested-parallel-wrong.f90 +100 -0
  67. offload/_root/data/findings/apps/cce20-device-link-infer-address-spaces-crash.f90 +159 -0
  68. offload/_root/data/findings/apps/cce21-device-link-agpr-copy-mfma-assert.f90 +343 -0
  69. offload/_root/data/findings/apps/cce21-private-array-loaded-subscript-wrong.f90 +113 -0
  70. offload/_root/data/findings/apps/controls/bubble-simple-rddot.f90 +284 -0
  71. offload/_root/data/findings/apps/controls/bubble-two-substeps.f90 +287 -0
  72. offload/_root/data/findings/apps/controls/cbc-inline.f90 +97 -0
  73. offload/_root/data/findings/apps/controls/cbc-integers.f90 +91 -0
  74. offload/_root/data/findings/apps/controls/cbc-only-density.f90 +97 -0
  75. offload/_root/data/findings/apps/controls/cbc-only-velocity.f90 +97 -0
  76. offload/_root/data/findings/apps/controls/gcc-acc-c-tile-control.c +26 -0
  77. offload/_root/data/findings/apps/controls/gcc-acc-tile-control.f90 +29 -0
  78. offload/_root/data/findings/apps/controls/private-array-subscript-probes.f90 +45 -0
  79. offload/_root/data/findings/apps/controls/teams-private-array-read-par.f90 +31 -0
  80. offload/_root/data/findings/apps/controls/teams-private-array-seq.f90 +30 -0
  81. offload/_root/data/findings/apps/controls/teams-private-array-shared.f90 +34 -0
  82. offload/_root/data/findings/apps/controls/teams-private-array-split.f90 +36 -0
  83. offload/_root/data/findings/apps/controls/teams-private-array-write-par.f90 +31 -0
  84. offload/_root/data/findings/apps/gcc-acc-c-tile-partial-tiles-wrong.c +60 -0
  85. offload/_root/data/findings/apps/gcc-acc-tile-partial-tiles-wrong.f90 +64 -0
  86. offload/_root/data/findings/catalog/afar-c-complex-reduction-link.c +66 -0
  87. offload/_root/data/findings/catalog/afar-c-critical-hint-link.c +68 -0
  88. offload/_root/data/findings/catalog/afar-c-ordered-doacross-link.c +62 -0
  89. offload/_root/data/findings/catalog/afar-c-reduction-task-link.c +81 -0
  90. offload/_root/data/findings/catalog/afar-flang-absent-optional-target-crash.f90 +76 -0
  91. offload/_root/data/findings/catalog/afar-flang-critical-target-parallel-wrong.f90 +74 -0
  92. offload/_root/data/findings/catalog/afar-flang-dist-schedule-chunk.f90 +80 -0
  93. offload/_root/data/findings/catalog/afar-flang-linear-parallel-ice.f90 +68 -0
  94. offload/_root/data/findings/catalog/afar-flang-named-critical-link.f90 +67 -0
  95. offload/_root/data/findings/catalog/afar-flang-ordered-wrong.f90 +78 -0
  96. offload/_root/data/findings/catalog/afar-flang-reduction-minus-rejected.f90 +77 -0
  97. offload/_root/data/findings/catalog/afar-flang-reduction-task-ice.f90 +68 -0
  98. offload/_root/data/findings/catalog/afar-flang-sections-in-target-ice.f90 +67 -0
  99. offload/_root/data/findings/catalog/afar-flang-workdistribute-ice.f90 +71 -0
  100. offload/_root/data/findings/catalog/c-allocate-const-mem-firstprivate-wrong.c +79 -0
  101. offload/_root/data/findings/catalog/cce-acc-allocate-in-compute-crash.f90 +65 -0
  102. offload/_root/data/findings/catalog/cce-acc-character-dummy-routine-ice.f90 +81 -0
  103. offload/_root/data/findings/catalog/cce-acc-loop-seq-in-routine-wrong.f90 +81 -0
  104. offload/_root/data/findings/catalog/cce-acc-stop-in-compute-crash.f90 +62 -0
  105. offload/_root/data/findings/catalog/cce-allocators-stack-ice.f90 +81 -0
  106. offload/_root/data/findings/catalog/cce-atomic-default-mem-order-acquire-release-rejected.f90 +61 -0
  107. offload/_root/data/findings/catalog/cce-c-allocate-align-link.c +83 -0
  108. offload/_root/data/findings/catalog/cce-c-allocate-allocator-modifier-rejected.c +77 -0
  109. offload/_root/data/findings/catalog/cce-c-device-type-directive-name-ice.c +70 -0
  110. offload/_root/data/findings/catalog/cce-c-dist-schedule-chunk.c +81 -0
  111. offload/_root/data/findings/catalog/cce-c-f-pointer-device-link.f90 +70 -0
  112. offload/_root/data/findings/catalog/cce-c-lastprivate-parallel-in-seq-loop-wrong.c +64 -0
  113. offload/_root/data/findings/catalog/cce-c-long-double-ice.c +61 -0
  114. offload/_root/data/findings/catalog/cce-c-map-iterator-ice.c +92 -0
  115. offload/_root/data/findings/catalog/cce-c-motion-iterator-rejected.c +68 -0
  116. offload/_root/data/findings/catalog/cce-c-ordered-doacross-link.c +64 -0
  117. offload/_root/data/findings/catalog/cce-c-ordered-link.c +77 -0
  118. offload/_root/data/findings/catalog/cce-c-recursive-function-ice.c +62 -0
  119. offload/_root/data/findings/catalog/cce-c-reduction-inscan-ice.c +67 -0
  120. offload/_root/data/findings/catalog/cce-c-reduction-task-link.c +73 -0
  121. offload/_root/data/findings/catalog/cce-c-sections-in-target-wrong.c +70 -0
  122. offload/_root/data/findings/catalog/cce-c-single-masked-task-link.c +66 -0
  123. offload/_root/data/findings/catalog/cce-c-task-in-target-link.c +75 -0
  124. offload/_root/data/findings/catalog/cce-c-uses-allocators-traits-rejected.c +71 -0
  125. offload/_root/data/findings/catalog/cce-flang-allocate-const-mem-ice.f90 +67 -0
  126. offload/_root/data/findings/catalog/cce-flang-allocate-in-target-crash.f90 +68 -0
  127. offload/_root/data/findings/catalog/cce-flang-lastprivate-parallel-in-seq-loop-wrong.f90 +83 -0
  128. offload/_root/data/findings/catalog/cce-flang-stop-in-target-crash.f90 +64 -0
  129. offload/_root/data/findings/catalog/cce-iterator-link.f90 +67 -0
  130. offload/_root/data/findings/catalog/cce-linear-lastprivate-ice.f90 +69 -0
  131. offload/_root/data/findings/catalog/cce-nohost-link.f90 +90 -0
  132. offload/_root/data/findings/catalog/cce-reduction-inscan-ice.f90 +66 -0
  133. offload/_root/data/findings/catalog/cce-reduction-task-link.f90 +76 -0
  134. offload/_root/data/findings/catalog/cce19-reduction-task-addrspacecast-ice.f90 +77 -0
  135. offload/_root/data/findings/catalog/cce20-c-defaultmap-private-storage-rejected.c +85 -0
  136. offload/_root/data/findings/catalog/cce20-map-self-rejected.f90 +64 -0
  137. offload/_root/data/findings/catalog/cce21-c-declare-target-local-rejected.c +73 -0
  138. offload/_root/data/findings/catalog/cce21-c-target-loop-ice.c +77 -0
  139. offload/_root/data/findings/catalog/defaultmap-present-private-array-abort.f90 +73 -0
  140. offload/_root/data/findings/catalog/nvhpc-acc-associate-illegal-address.f90 +66 -0
  141. offload/_root/data/findings/catalog/nvhpc-c-function-pointer-kernel-missing.c +68 -0
  142. offload/_root/data/findings/catalog/nvhpc-c-long-double-kernel-missing.c +64 -0
  143. offload/_root/data/findings/catalog/nvhpc-c-static-local-kernel-missing.c +73 -0
  144. offload/_root/data/findings/catalog/nvhpc-c-vla-kernel-missing.c +63 -0
  145. offload/_root/data/findings/catalog/nvhpc-flang-type-bound-kernel-missing.f90 +86 -0
  146. offload/_root/data/findings/cce-acc-init-set-runtime-assert.f90 +35 -0
  147. offload/_root/data/findings/cce-acc-reduction-200-int8-scalars-wrong.f90 +1278 -0
  148. offload/_root/data/findings/cce-acc-routine-bind-module-ice.f90 +35 -0
  149. offload/_root/data/findings/cce-acc-self-condition-ignored.f90 +17 -0
  150. offload/_root/data/findings/cce-c-dist-schedule-segv.c +34 -0
  151. offload/_root/data/findings/cce-c-map-delete-refcount.c +47 -0
  152. offload/_root/data/findings/cce-c-map-present-assert.c +45 -0
  153. offload/_root/data/findings/cce-c-openmp45-device-link.c +34 -0
  154. offload/_root/data/findings/cce-c-parallel-for-in-target.c +73 -0
  155. offload/_root/data/findings/cce-defaultmap-tofrom-explicit-map.f90 +92 -0
  156. offload/_root/data/findings/cce-mapper-next-map-copy-back.f90 +48 -0
  157. offload/_root/data/findings/cce-trim-merge-output-one-character.f90 +40 -0
  158. offload/_root/data/findings/cce-uses-allocators-traits-omp50.f90 +28 -0
  159. offload/_root/data/findings/cce19-acc-if-false-link.f90 +17 -0
  160. offload/_root/data/findings/cce19-c-reduction-63-scalars-one-wrong.c +235 -0
  161. offload/_root/data/findings/cce19-target-parallel-guarded-loop.f90 +35 -0
  162. offload/_root/data/findings/cce19-target-parallel-single-ice.f90 +38 -0
  163. offload/_root/data/findings/cce21-alloc-2e32-sum-wrong.f90 +68 -0
  164. offload/_root/data/findings/cce21-defaultmap-aggregate-flag.f90 +52 -0
  165. offload/_root/data/findings/cce21-in-reduction-assumed-shape-write-lost.f90 +61 -0
  166. offload/_root/data/findings/cce21-in-reduction-taskwait-link.f90 +59 -0
  167. offload/_root/data/findings/cce21-linear-modifier-default-none.f90 +59 -0
  168. offload/_root/data/findings/clang-c-declare-target-to-omp52.c +50 -0
  169. offload/_root/data/findings/clang-c-linear-directive-name-hang.c +30 -0
  170. offload/_root/data/findings/clang-c-map-iterator-omp51.c +51 -0
  171. offload/_root/data/findings/clang-c-shared-declare-target-combined.c +58 -0
  172. offload/_root/data/findings/dataenv/cce-value-dummy-target-write-visible.f90 +74 -0
  173. offload/_root/data/findings/defaultmap-none-loop-variable.f90 +69 -0
  174. offload/_root/data/findings/fortran-loop-bind-thread-in-parallel.f90 +53 -0
  175. offload/_root/data/findings/fortran-schedule-static-in-target.f90 +55 -0
  176. offload/_root/data/findings/fresh/cce-common-block-name-in-map-rejected.f90 +47 -0
  177. offload/_root/data/findings/fresh/cce-if-stop-in-target-ice-one-condition.f90 +38 -0
  178. offload/_root/data/findings/fresh/cce-if-stop-in-target-ice.f90 +43 -0
  179. offload/_root/data/findings/fresh/cce-list-directed-print-in-target-copy-crash.f90 +40 -0
  180. offload/_root/data/findings/fresh/cce19-acc-automatic-array-copyout-copy-crash.f90 +56 -0
  181. offload/_root/data/findings/fresh/cce21-combined-if-runtime-expr-loop-skipped.f90 +57 -0
  182. offload/_root/data/findings/fresh/nvhpc-acc-gang-worker-collapse-nested-vector-reduction-lost.f90 +67 -0
  183. offload/_root/data/findings/fresh/nvhpc-teams-loop-module-allocatable-assign-fort2-crash.f90 +73 -0
  184. offload/_root/data/findings/fuzz/1131-afar.f90 +48 -0
  185. offload/_root/data/findings/fuzz/1391-cce20.f90 +40 -0
  186. offload/_root/data/findings/fuzz/14-cce20.f90 +36 -0
  187. offload/_root/data/findings/fuzz/1505-cce20.f90 +88 -0
  188. offload/_root/data/findings/fuzz/1540-afar.f90 +44 -0
  189. offload/_root/data/findings/fuzz/158-afar.f90 +63 -0
  190. offload/_root/data/findings/fuzz/16-cce20.f90 +39 -0
  191. offload/_root/data/findings/fuzz/1644-cce21.f90 +31 -0
  192. offload/_root/data/findings/fuzz/165-cce19.f90 +52 -0
  193. offload/_root/data/findings/fuzz/1749-cce20.f90 +34 -0
  194. offload/_root/data/findings/fuzz/1936-afar.f90 +61 -0
  195. offload/_root/data/findings/fuzz/1978-cce19.f90 +41 -0
  196. offload/_root/data/findings/fuzz/2014-cce19.f90 +46 -0
  197. offload/_root/data/findings/fuzz/2224-cce19.f90 +30 -0
  198. offload/_root/data/findings/fuzz/2334-cce19.f90 +57 -0
  199. offload/_root/data/findings/fuzz/536-cce19.f90 +38 -0
  200. offload/_root/data/findings/fuzz/591-cce19.f90 +54 -0
  201. offload/_root/data/findings/fuzz/650-afar.f90 +58 -0
  202. offload/_root/data/findings/fuzz/698-afar.f90 +68 -0
  203. offload/_root/data/findings/fuzz/700-afar.f90 +46 -0
  204. offload/_root/data/findings/fuzz/775-cce21.f90 +33 -0
  205. offload/_root/data/findings/fuzz/87-afar.f90 +47 -0
  206. offload/_root/data/findings/fuzz/916-afar.f90 +67 -0
  207. offload/_root/data/findings/fuzz/958-cce20.f90 +44 -0
  208. offload/_root/data/findings/fuzz/98-cce19.f90 +40 -0
  209. offload/_root/data/findings/fuzz/README.md +236 -0
  210. offload/_root/data/findings/fuzz/b1-121-afar.f90 +47 -0
  211. offload/_root/data/findings/fuzz/b1-183-afar.f90 +55 -0
  212. offload/_root/data/findings/fuzz/b1-22-cce20.f90 +38 -0
  213. offload/_root/data/findings/fuzz/b1-231-afar.f90 +56 -0
  214. offload/_root/data/findings/fuzz/b1-268-afar.f90 +46 -0
  215. offload/_root/data/findings/fuzz/b2-183-afar.f90 +57 -0
  216. offload/_root/data/findings/fuzz/b2-209-cce19.f90 +51 -0
  217. offload/_root/data/findings/fuzz/b2-213-afar.f90 +63 -0
  218. offload/_root/data/findings/fuzz/b2-52-afar.f90 +56 -0
  219. offload/_root/data/findings/fuzz/b2-68-afar.f90 +54 -0
  220. offload/_root/data/findings/fuzz/b2-85-cce20.f90 +55 -0
  221. offload/_root/data/findings/fuzz/b3-188-cce19.f90 +90 -0
  222. offload/_root/data/findings/fuzz/b3-190-cce21.f90 +88 -0
  223. offload/_root/data/findings/fuzz/b3-197-cce19.f90 +77 -0
  224. offload/_root/data/findings/fuzz/b3-250-cce20.f90 +89 -0
  225. offload/_root/data/findings/fuzz/b3-278-cce19.f90 +70 -0
  226. offload/_root/data/findings/fuzz/b3-45-cce21.f90 +83 -0
  227. offload/_root/data/findings/fuzz/b3-54-afar.f90 +67 -0
  228. offload/_root/data/findings/fuzz/b3-61-cce20.f90 +100 -0
  229. offload/_root/data/findings/fuzz/b3-9-afar.f90 +100 -0
  230. offload/_root/data/findings/fuzz/b3-9-cce21.f90 +103 -0
  231. offload/_root/data/findings/fuzz/b3-94-afar.f90 +80 -0
  232. offload/_root/data/findings/fuzz/b4-39-afar.f90 +141 -0
  233. offload/_root/data/findings/fuzz/b4-86-cce19.f90 +71 -0
  234. offload/_root/data/findings/fuzz/controls/gcc-complex-pointer-store-control.f90 +28 -0
  235. offload/_root/data/findings/fuzz/controls/gcc-declare-reduction-module-control.f90 +29 -0
  236. offload/_root/data/findings/fuzz/controls/gcc-target-simd-map-nontemporal-control.f90 +21 -0
  237. offload/_root/data/findings/fuzz/controls/nvhpc-allocatable-component-mapped-control.f90 +22 -0
  238. offload/_root/data/findings/fuzz/controls/nvhpc-allocatable-component-unreferenced-control.f90 +22 -0
  239. offload/_root/data/findings/fuzz/controls/nvhpc-default-none-removed-control.f90 +18 -0
  240. offload/_root/data/findings/fuzz/controls/nvhpc-default-shared-control.f90 +18 -0
  241. offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-firstprivate-removed-control.f90 +15 -0
  242. offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-to-scalar-reduction-mapped-control.f90 +17 -0
  243. offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-to-scalar-removed-control.f90 +17 -0
  244. offload/_root/data/findings/fuzz/controls/nvhpc-defaultmap-tofrom-lastprivate-control.f90 +15 -0
  245. offload/_root/data/findings/fuzz/controls/nvhpc-depend-explicit-map-control.f90 +22 -0
  246. offload/_root/data/findings/fuzz/controls/nvhpc-depend-removed-control.f90 +22 -0
  247. offload/_root/data/findings/fuzz/controls/nvhpc-distribute-end-distribute-control.f90 +16 -0
  248. offload/_root/data/findings/fuzz/controls/nvhpc-distribute-parallel-num-threads-removed-control.f90 +26 -0
  249. offload/_root/data/findings/fuzz/controls/nvhpc-distribute-parallel-removed-control.f90 +22 -0
  250. offload/_root/data/findings/fuzz/controls/nvhpc-distribute-simd-no-end-directive-control.f90 +15 -0
  251. offload/_root/data/findings/fuzz/controls/nvhpc-explicit-length-character-dummy-control.f90 +18 -0
  252. offload/_root/data/findings/fuzz/controls/nvhpc-loop-character-array-value-control.f90 +23 -0
  253. offload/_root/data/findings/fuzz/controls/nvhpc-loop-character-distribute-control.f90 +20 -0
  254. offload/_root/data/findings/fuzz/controls/nvhpc-map-always-first-control.f90 +15 -0
  255. offload/_root/data/findings/fuzz/controls/nvhpc-map-always-removed-control.f90 +15 -0
  256. offload/_root/data/findings/fuzz/controls/nvhpc-num-threads-removed-control.f90 +12 -0
  257. offload/_root/data/findings/fuzz/controls/nvhpc-target-parallel-firstprivate-dropped-control.f90 +15 -0
  258. offload/_root/data/findings/fuzz/controls/nvhpc-target-parallel-single-nowait-control.f90 +13 -0
  259. offload/_root/data/findings/fuzz/controls/nvhpc-target-parallel-split-control.f90 +15 -0
  260. offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-collapse-split-control.f90 +21 -0
  261. offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-end-directive-control.f90 +14 -0
  262. offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-no-collapse-control.f90 +19 -0
  263. offload/_root/data/findings/fuzz/controls/nvhpc-target-simd-split-no-end-directive-control.f90 +15 -0
  264. offload/_root/data/findings/fuzz/gcc-declare-reduction-module-not-found.f90 +66 -0
  265. offload/_root/data/findings/fuzz/gcc-strided-target-update-rejected.f90 +58 -0
  266. offload/_root/data/findings/fuzz/gcc-target-simd-map-nontemporal-rejected.f90 +54 -0
  267. offload/_root/data/findings/fuzz/nvhpc-allocatable-component-implicit-map-illegal-address.f90 +84 -0
  268. offload/_root/data/findings/fuzz/nvhpc-assumed-length-character-dummy-map-ice.f90 +69 -0
  269. offload/_root/data/findings/fuzz/nvhpc-default-none-reduction-lastprivate-fort1-crash.f90 +70 -0
  270. offload/_root/data/findings/fuzz/nvhpc-defaultmap-firstprivate-lastprivate-ice.f90 +71 -0
  271. offload/_root/data/findings/fuzz/nvhpc-defaultmap-to-scalar-reduction-lost.f90 +82 -0
  272. offload/_root/data/findings/fuzz/nvhpc-depend-implicit-map-illegal-address.f90 +81 -0
  273. offload/_root/data/findings/fuzz/nvhpc-distribute-parallel-num-threads-writes-lost.f90 +79 -0
  274. offload/_root/data/findings/fuzz/nvhpc-end-distribute-simd-rejected.f90 +70 -0
  275. offload/_root/data/findings/fuzz/nvhpc-loop-character-achar-unsupported.f90 +75 -0
  276. offload/_root/data/findings/fuzz/nvhpc-map-always-after-map-to-not-copied-back.f90 +70 -0
  277. offload/_root/data/findings/fuzz/nvhpc-num-threads-reduction-identity-lost.f90 +54 -0
  278. offload/_root/data/findings/fuzz/nvhpc-target-parallel-firstprivate-translate-failure.f90 +66 -0
  279. offload/_root/data/findings/fuzz/nvhpc-target-parallel-single-hang.f90 +68 -0
  280. offload/_root/data/findings/fuzz/nvhpc-target-simd-collapse-translate-failure.f90 +73 -0
  281. offload/_root/data/findings/fuzz/nvhpc-target-simd-no-end-directive-rejected.f90 +68 -0
  282. offload/_root/data/findings/fuzz/par-s1-2082-gcc_g90.f90 +71 -0
  283. offload/_root/data/findings/fuzz/s1-2370-cce21.f90 +67 -0
  284. offload/_root/data/findings/fuzz/s1-2592-cce21.f90 +56 -0
  285. offload/_root/data/findings/fuzz/s1-3463-cce21.f90 +92 -0
  286. offload/_root/data/findings/fuzz/s1-4339-afar.f90 +79 -0
  287. offload/_root/data/findings/fuzz/s1-6085-cce21.f90 +96 -0
  288. offload/_root/data/findings/fuzz/s1-6760-cce20.f90 +65 -0
  289. offload/_root/data/findings/fuzz/s1-6888-cce21.f90 +76 -0
  290. offload/_root/data/findings/fuzz/s1-7882-cce20.f90 +63 -0
  291. offload/_root/data/findings/fuzz/s1-8634-cce21.f90 +45 -0
  292. offload/_root/data/findings/fuzz/s1-91-cce21.f90 +92 -0
  293. offload/_root/data/findings/fuzz/s1-9443-afar.f90 +59 -0
  294. offload/_root/data/findings/fuzz/s1-9914-cce19.f90 +78 -0
  295. offload/_root/data/findings/gcc/controls/gcc-acc-c-detach-control.c +34 -0
  296. offload/_root/data/findings/gcc/controls/gcc-acc-detach-control.f90 +26 -0
  297. offload/_root/data/findings/gcc/controls/gcc-defaultmap-to-pointer-control.f90 +31 -0
  298. offload/_root/data/findings/gcc/controls/gcc-target-in-task-control.c +26 -0
  299. offload/_root/data/findings/gcc/controls/gcc-target-in-task-control.f90 +21 -0
  300. offload/_root/data/findings/gcc/gcc-acc-bind-device-type-rejected.f90 +71 -0
  301. offload/_root/data/findings/gcc/gcc-acc-c-bind-device-type-rejected.c +76 -0
  302. offload/_root/data/findings/gcc/gcc-acc-c-detach-delete-attach-underflow.c +74 -0
  303. offload/_root/data/findings/gcc/gcc-acc-c-gang-dim-rejected.c +79 -0
  304. offload/_root/data/findings/gcc/gcc-acc-c-link-in-routine-rejected.c +82 -0
  305. offload/_root/data/findings/gcc/gcc-acc-detach-delete-attach-underflow.f90 +66 -0
  306. offload/_root/data/findings/gcc/gcc-acc-gang-dim-collapse-force-rejected.f90 +69 -0
  307. offload/_root/data/findings/gcc/gcc-acc-init-set-shutdown-rejected.f90 +70 -0
  308. offload/_root/data/findings/gcc/gcc-acc-link-in-routine-rejected.f90 +82 -0
  309. offload/_root/data/findings/gcc/gcc-acc-use-device-allocatable-rejected.f90 +88 -0
  310. offload/_root/data/findings/gcc/gcc-c-motion-mapper-rejected.c +110 -0
  311. offload/_root/data/findings/gcc/gcc-c-omp60-undocumented-rejected.c +76 -0
  312. offload/_root/data/findings/gcc/gcc-c-omp60-unimplemented-rejected.c +119 -0
  313. offload/_root/data/findings/gcc/gcc-c-target-in-task-mandatory-device-not-found.c +87 -0
  314. offload/_root/data/findings/gcc/gcc-c-uses-allocators-traits-unimplemented.c +85 -0
  315. offload/_root/data/findings/gcc/gcc-declare-mapper-rejected.f90 +85 -0
  316. offload/_root/data/findings/gcc/gcc-defaultmap-to-pointer-copy-back.f90 +66 -0
  317. offload/_root/data/findings/gcc/gcc-loop-bind-default-none-rejected.f90 +93 -0
  318. offload/_root/data/findings/gcc/gcc-omp60-undocumented-rejected.f90 +72 -0
  319. offload/_root/data/findings/gcc/gcc-omp60-unimplemented-rejected.f90 +112 -0
  320. offload/_root/data/findings/gcc/gcc-target-in-task-mandatory-device-not-found.f90 +83 -0
  321. offload/_root/data/findings/gcc/gcc-uses-allocators-traits-unimplemented.f90 +78 -0
  322. offload/_root/data/findings/harvest/afar-flang-strided-target-update.f90 +96 -0
  323. offload/_root/data/findings/harvest/cce-acc-declare-create-module-allocatable-xnack1-fault.f90 +58 -0
  324. offload/_root/data/findings/harvest/cce-c-implicit-struct-map-partly-present.c +100 -0
  325. offload/_root/data/findings/harvest/cce-c-strided-target-update.c +74 -0
  326. offload/_root/data/findings/harvest/cce-ftn-target-parallel-thread-query-ice.f90 +67 -0
  327. offload/_root/data/findings/harvest/cce-named-constant-array-declare-target-routine-rejected.f90 +69 -0
  328. offload/_root/data/findings/harvest/cce-use-device-ptr-c-ptr-not-converted.f90 +64 -0
  329. offload/_root/data/findings/harvest/cce21-declare-target-link-module-variable-write-lost.f90 +63 -0
  330. offload/_root/data/findings/harvest/cce21-internal-procedure-calls-internal-in-target-fault.f90 +71 -0
  331. offload/_root/data/findings/harvest/controls/cce-c-implicit-struct-map-partly-present-target-only-control.c +22 -0
  332. offload/_root/data/findings/harvest/controls/cce-c-implicit-struct-map-partly-present-whole-control.c +23 -0
  333. offload/_root/data/findings/harvest/controls/gcc-acc-declare-create-allocatable-control.f90 +34 -0
  334. offload/_root/data/findings/harvest/controls/gcc-c-same-item-two-maps-control.c +17 -0
  335. offload/_root/data/findings/harvest/controls/gcc-c-target-data-struct-pointer-section-control.c +27 -0
  336. offload/_root/data/findings/harvest/controls/gcc-c-target-data-two-maps-control.c +20 -0
  337. offload/_root/data/findings/harvest/controls/gcc-same-item-two-maps-control.f90 +16 -0
  338. offload/_root/data/findings/harvest/controls/gcc-teams-simd-matmul-allocatable-control.f90 +27 -0
  339. offload/_root/data/findings/harvest/gcc-acc-declare-create-allocatable-not-mapped.f90 +66 -0
  340. offload/_root/data/findings/harvest/gcc-c-same-item-two-maps-rejected.c +45 -0
  341. offload/_root/data/findings/harvest/gcc-c-strided-section-rejected.c +70 -0
  342. offload/_root/data/findings/harvest/gcc-c-target-data-struct-pointer-section-ice.c +78 -0
  343. offload/_root/data/findings/harvest/gcc-c-target-data-two-maps-ice.c +49 -0
  344. offload/_root/data/findings/harvest/gcc-same-item-two-maps-rejected.f90 +46 -0
  345. offload/_root/data/findings/harvest/gcc-teams-simd-matmul-allocatable-ice.f90 +53 -0
  346. offload/_root/data/findings/harvest/nvhpc-c-target-data-if-false-use-device-ptr-garbage.c +49 -0
  347. offload/_root/data/findings/harvest/nvhpc-named-constant-array-declare-target-routine-rejected.f90 +65 -0
  348. offload/_root/data/findings/harvest/nvhpc-use-device-ptr-c-ptr-not-found.f90 +60 -0
  349. offload/_root/data/findings/harvest/nvhpc2511-target-nowait-in-parallel-for-ice.c +59 -0
  350. offload/_root/data/findings/hecbench/controls/f16-ctl-float-array.c +28 -0
  351. offload/_root/data/findings/hecbench/controls/pc-ctl-builtin-popcount.c +37 -0
  352. offload/_root/data/findings/hecbench/controls/pc-ctl-shift-sum.c +43 -0
  353. offload/_root/data/findings/hecbench/gcc-c-float16-array-in-target-lto-ice.c +65 -0
  354. offload/_root/data/findings/hecbench/gcc-c-swar-popcount-assembler-error.c +80 -0
  355. offload/_root/data/findings/index.yaml +2453 -0
  356. offload/_root/data/findings/malloc/afar-device-malloc-in-kernel-corrupts-records.c +371 -0
  357. offload/_root/data/findings/malloc/controls/afar-first-use-malloc-direct.c +52 -0
  358. offload/_root/data/findings/malloc/controls/afar-first-use-malloc-fence.c +57 -0
  359. offload/_root/data/findings/malloc/controls/afar-first-use-malloc-flush.c +57 -0
  360. offload/_root/data/findings/malloc/controls/afar-first-use-malloc-stack.c +52 -0
  361. offload/_root/data/findings/multithread-allocatable-section-maps.f90 +91 -0
  362. offload/_root/data/findings/nested/afar-cce-c-call-result-member-in-target-rejected.c +69 -0
  363. offload/_root/data/findings/nested/afar-cce-c-update-struct-and-member-rejected.c +92 -0
  364. offload/_root/data/findings/nested/afar-flang-pointer-root-allocatable-component-enter-data-fault.f90 +121 -0
  365. offload/_root/data/findings/nested/cce-c-struct-and-nested-pointee-sections-ice.c +79 -0
  366. offload/_root/data/findings/nested/cce-fortran-nested-allocatable-component-copy-fault.f90 +64 -0
  367. offload/_root/data/findings/nested/cce-fortran-pointer-to-type-with-allocatable-scalar-component-typed-transfer.f90 +93 -0
  368. offload/_root/data/findings/nested/cce-fortran-update-to-pointer-root-allocatable-scalar-component-no-accelerator-object.f90 +80 -0
  369. offload/_root/data/findings/nested/controls/c3-ctl-nested-data.c +27 -0
  370. offload/_root/data/findings/nested/controls/c5-acc-serial-struct-and-array.c +26 -0
  371. offload/_root/data/findings/nested/controls/e2-ctl-two-directives.c +42 -0
  372. offload/_root/data/findings/nested/controls/e3-ctl-attach-clause.c +42 -0
  373. offload/_root/data/findings/nested/controls/f3-pointer-array-only.c +33 -0
  374. offload/_root/data/findings/nested/controls/f5-ctl-copyout-exit.c +33 -0
  375. offload/_root/data/findings/nested/controls/f6-ctl-pointer-to-struct-array.c +28 -0
  376. offload/_root/data/findings/nested/controls/g2-ctl-allocatable.f90 +34 -0
  377. offload/_root/data/findings/nested/controls/g2-ctl-entered-to.f90 +34 -0
  378. offload/_root/data/findings/nested/controls/g3-ctl-from-struct-no-element.c +27 -0
  379. offload/_root/data/findings/nested/controls/g3-ptrs-two-elements-to.c +27 -0
  380. offload/_root/data/findings/nested/controls/g3-ptrs-two-elements-tofrom.c +27 -0
  381. offload/_root/data/findings/nested/controls/g5-ctl-element-pointers-only.f90 +36 -0
  382. offload/_root/data/findings/nested/controls/g5-ctl-root-pointer-only.f90 +36 -0
  383. offload/_root/data/findings/nested/controls/gp2-ctl-no-mapper-explicit-maps.c +24 -0
  384. offload/_root/data/findings/nested/controls/gt2-ctl-no-always.c +26 -0
  385. offload/_root/data/findings/nested/controls/gt3-ctl-always-on-structure-only.c +26 -0
  386. offload/_root/data/findings/nested/controls/j1-embedded-struct-pointer-to-struct.c +24 -0
  387. offload/_root/data/findings/nested/controls/j2-ctl-pointer-instead-of-embedded.c +24 -0
  388. offload/_root/data/findings/nested/controls/j6-ctl-struct-and-one-pointee-level.c +23 -0
  389. offload/_root/data/findings/nested/controls/j7-ctl-struct-and-embedded-pointee.c +24 -0
  390. offload/_root/data/findings/nested/controls/m2-ctl-variable-root.f90 +32 -0
  391. offload/_root/data/findings/nested/controls/m3-ctl-fixed-array-component.f90 +32 -0
  392. offload/_root/data/findings/nested/controls/m5-ctl-no-enter-data.f90 +33 -0
  393. offload/_root/data/findings/nested/controls/n8-ctl-fixed-array-in-component.f90 +33 -0
  394. offload/_root/data/findings/nested/controls/n9-ctl-allocatable-in-the-variable.f90 +33 -0
  395. offload/_root/data/findings/nested/controls/ns4-ctl-two-directives-struct-then-pointee.c +27 -0
  396. offload/_root/data/findings/nested/controls/ns8-ctl-enter-together-exit-split.c +26 -0
  397. offload/_root/data/findings/nested/controls/nu3-ctl-update-pointee-only.c +28 -0
  398. offload/_root/data/findings/nested/controls/p2-ctl-pointer-variable.c +27 -0
  399. offload/_root/data/findings/nested/controls/p3-ctl-direct-member.c +26 -0
  400. offload/_root/data/findings/nested/controls/q2-ctl-fixed-array.f90 +37 -0
  401. offload/_root/data/findings/nested/controls/q3-ctl-allocatable-component-of-the-variable.f90 +38 -0
  402. offload/_root/data/findings/nested/controls/ta2-ctl-no-allocatable-component.f90 +42 -0
  403. offload/_root/data/findings/nested/controls/ta3-ctl-allocatable-scalar-in-the-variable.f90 +38 -0
  404. offload/_root/data/findings/nested/controls/ta4-ctl-pointer-component-only.f90 +42 -0
  405. offload/_root/data/findings/nested/controls/u3-ctl-update-member-only.c +24 -0
  406. offload/_root/data/findings/nested/controls/u4-ctl-two-updates.c +25 -0
  407. offload/_root/data/findings/nested/controls/u5-ctl-same-list-in-map.c +25 -0
  408. offload/_root/data/findings/nested/controls/ua2-ctl-variable-root.f90 +37 -0
  409. offload/_root/data/findings/nested/controls/ua4-ctl-to-in-place-of-alloc-and-update.f90 +37 -0
  410. offload/_root/data/findings/nested/controls/v2-ctl-parent-first.c +25 -0
  411. offload/_root/data/findings/nested/controls/v4-ctl-embedded-member.c +24 -0
  412. offload/_root/data/findings/nested/gcc-acc-c-exit-data-of-a-pointer-array-element-target-hangs.c +83 -0
  413. offload/_root/data/findings/nested/gcc-acc-c-parent-and-shared-pointee-one-directive.c +88 -0
  414. offload/_root/data/findings/nested/gcc-acc-c-struct-and-member-array-one-directive.c +84 -0
  415. offload/_root/data/findings/nested/gcc-c-always-on-pointer-member-section-ice.c +75 -0
  416. offload/_root/data/findings/nested/gcc-c-declare-mapper-pointer-member-section-gpu-fault.c +93 -0
  417. offload/_root/data/findings/nested/gcc-c-from-struct-and-pointee-section-rejected.c +83 -0
  418. offload/_root/data/findings/nested/gcc-fortran-pointer-component-alloc-bounds-lost.f90 +62 -0
  419. offload/_root/data/findings/nested/gcc-fortran-root-and-element-pointer-components-ice.f90 +77 -0
  420. offload/_root/data/findings/nested/nvhpc-c-pointee-before-parent-in-one-map-list-copy-fault.c +55 -0
  421. offload/_root/data/findings/nested/nvhpc-c-update-from-structure-overwrites-attached-pointer-segv.c +86 -0
  422. offload/_root/data/findings/nvhpc-acc-atomic-update-sum-fort2-crash.f90 +53 -0
  423. offload/_root/data/findings/nvhpc-c-acc-atomic-update-sum-ice.c +43 -0
  424. offload/_root/data/findings/nvhpc-c-dist-schedule-chunk-compile-hang.c +41 -0
  425. offload/_root/data/findings/nvhpc-c-map-present-ignored.c +42 -0
  426. offload/_root/data/findings/nvhpc-c-ordered-in-target-nvcpfe-crash.c +92 -0
  427. offload/_root/data/findings/nvhpc-c-parallel-for-firstprivate-in-target.c +62 -0
  428. offload/_root/data/findings/nvhpc-c-parallel-if-in-target-nvvm-ice.c +56 -0
  429. offload/_root/data/findings/nvhpc-defaultmap-firstprivate-explicit-map.f90 +45 -0
  430. offload/_root/data/findings/nvhpc-defaultmap-from-allocatable-indexing.f90 +60 -0
  431. offload/_root/data/findings/nvhpc-depend-inoutset-ignored.f90 +64 -0
  432. offload/_root/data/findings/nvhpc-dist-schedule-chunk-illegal-address.f90 +52 -0
  433. offload/_root/data/findings/nvhpc-managed-acc-shutdown-host-access.f90 +42 -0
  434. offload/_root/data/findings/nvhpc-parallel-if-in-target-nvvm-ice.f90 +60 -0
  435. offload/_root/data/findings/oop/afar-final-dealloc-device-link.f90 +85 -0
  436. offload/_root/data/findings/oop/afar-pdt-length-parameter-not-implemented.f90 +65 -0
  437. offload/_root/data/findings/oop/cce-class-is-device-link.f90 +86 -0
  438. offload/_root/data/findings/oop/cce-copy-alloc-component-section-fault.f90 +73 -0
  439. offload/_root/data/findings/oop/cce-copy-parent-to-component-tofrom-lost.f90 +65 -0
  440. offload/_root/data/findings/oop/cce-copy-second-member-section-lost.f90 +65 -0
  441. offload/_root/data/findings/oop/cce-element-component-map-lost.f90 +64 -0
  442. offload/_root/data/findings/oop/cce-final-dealloc-device-abort.f90 +85 -0
  443. offload/_root/data/findings/oop/cce-pdt-default-mapper-rejected.f90 +71 -0
  444. offload/_root/data/findings/oop/cce-polymorphic-dispatch-device-link.f90 +100 -0
  445. offload/_root/data/findings/oop/cce-section-of-element-component-overlap.f90 +76 -0
  446. offload/_root/data/findings/oop/cce-select-type-guard-not-taken.f90 +91 -0
  447. offload/_root/data/findings/oop/cce-udr-derived-type-unsupported.f90 +69 -0
  448. offload/_root/data/findings/oop/cce21-element-component-map-lost.f90 +62 -0
  449. offload/_root/data/findings/oop/controls/alloccomp-comp-only.f90 +44 -0
  450. offload/_root/data/findings/oop/controls/alloccomp-whole-explicit-component.f90 +50 -0
  451. offload/_root/data/findings/oop/controls/alloccomp-whole.f90 +49 -0
  452. offload/_root/data/findings/oop/controls/elemsec-element.f90 +47 -0
  453. offload/_root/data/findings/oop/controls/final-local.f90 +64 -0
  454. offload/_root/data/findings/oop/controls/host-class-star-select-type.f90 +58 -0
  455. offload/_root/data/findings/oop/controls/host-firstprivate-defined-assignment.f90 +54 -0
  456. offload/_root/data/findings/oop/controls/host-lastprivate-defined-assignment.f90 +58 -0
  457. offload/_root/data/findings/oop/controls/host-private-finalization.f90 +51 -0
  458. offload/_root/data/findings/oop/controls/host-select-type.f90 +65 -0
  459. offload/_root/data/findings/oop/controls/parent-and-comp-component-only.f90 +45 -0
  460. offload/_root/data/findings/oop/controls/pdt-kind.f90 +46 -0
  461. offload/_root/data/findings/oop/controls/pdt-len-host.f90 +43 -0
  462. offload/_root/data/findings/oop/controls/pdt-len-unparameterized.f90 +46 -0
  463. offload/_root/data/findings/oop/controls/poly-dispatch-static.f90 +75 -0
  464. offload/_root/data/findings/oop/controls/section-alloc-whole-component.f90 +49 -0
  465. offload/_root/data/findings/oop/controls/section-element-whole-array.f90 +50 -0
  466. offload/_root/data/findings/oop/controls/section-element-whole-component.f90 +50 -0
  467. offload/_root/data/findings/oop/controls/section-fixed.f90 +43 -0
  468. offload/_root/data/findings/oop/controls/tbp-override.f90 +64 -0
  469. offload/_root/data/findings/oop/gcc-acc-parent-and-member-data-rejected.f90 +63 -0
  470. offload/_root/data/findings/oop/gcc-pdt-length-parameter-abort.f90 +68 -0
  471. offload/_root/data/findings/oop/gcc-polymorphic-dispatch-abort.f90 +97 -0
  472. offload/_root/data/findings/oop/gcc-vtab-not-marked-for-offload.f90 +94 -0
  473. offload/_root/data/findings/oop/nvhpc-copy-alloc-component-illegal-address.f90 +76 -0
  474. offload/_root/data/findings/oop/nvhpc-copy-pdt-length-parameter-illegal-address.f90 +69 -0
  475. offload/_root/data/findings/oop/nvhpc-named-mapper-rejected.f90 +65 -0
  476. offload/_root/data/findings/oop/nvhpc-polymorphic-dispatch-translate-failure.f90 +90 -0
  477. offload/_root/data/findings/oop/nvhpc-polymorphism-runtime-unsupported.f90 +94 -0
  478. offload/_root/data/findings/oop/nvhpc-type-bound-call-rejected.f90 +89 -0
  479. offload/_root/data/findings/oop/nvhpc-udr-derived-type-rejected.f90 +67 -0
  480. offload/_root/data/findings/reviews/afar-c-error-directive-in-target-link.json +217 -0
  481. offload/_root/data/findings/reviews/afar-c-lastprivate-distribute-parallel-for-small-type.json +113 -0
  482. offload/_root/data/findings/reviews/afar-c-teams-distribute-reduction-first-team.json +130 -0
  483. offload/_root/data/findings/reviews/afar-c-update-iterator-copy-mode.json +113 -0
  484. offload/_root/data/findings/reviews/afar-cce19-character-defaultmap.json +292 -0
  485. offload/_root/data/findings/reviews/afar-clang-requires-device-safesync-hang.json +191 -0
  486. offload/_root/data/findings/reviews/afar-flang-firstprivate-map-two-targets.json +130 -0
  487. offload/_root/data/findings/reviews/afar-flang-loop-bind-teams-reduction.json +126 -0
  488. offload/_root/data/findings/reviews/afar-flang-task-reduction-max.json +113 -0
  489. offload/_root/data/findings/reviews/afar-flang-thread-limit-target-parallel-do.json +113 -0
  490. offload/_root/data/findings/reviews/afar-loop-bind-thread-in-teams.json +191 -0
  491. offload/_root/data/findings/reviews/afar-nontemporal-assumed-shape-ice.json +113 -0
  492. offload/_root/data/findings/reviews/afar-udr-derived-type-link.json +113 -0
  493. offload/_root/data/findings/reviews/afar-xnack1-atomic-min-nested-parallel.json +113 -0
  494. offload/_root/data/findings/reviews/afar-xnack1-target-is-present.json +113 -0
  495. offload/_root/data/findings/reviews/apps--afar-cce-teams-private-array-nested-parallel-wrong.json +113 -0
  496. offload/_root/data/findings/reviews/apps--cce20-device-link-infer-address-spaces-crash.json +113 -0
  497. offload/_root/data/findings/reviews/apps--cce21-device-link-agpr-copy-mfma-assert.json +113 -0
  498. offload/_root/data/findings/reviews/apps--cce21-private-array-loaded-subscript-wrong.json +113 -0
  499. offload/_root/data/findings/reviews/apps--gcc-acc-c-tile-partial-tiles-wrong.json +113 -0
  500. offload/_root/data/findings/reviews/catalog--afar-c-ordered-doacross-link.json +113 -0
  501. offload/_root/data/findings/reviews/catalog--afar-c-reduction-task-link.json +113 -0
  502. offload/_root/data/findings/reviews/catalog--afar-flang-absent-optional-target-crash.json +113 -0
  503. offload/_root/data/findings/reviews/catalog--afar-flang-critical-target-parallel-wrong.json +113 -0
  504. offload/_root/data/findings/reviews/catalog--afar-flang-dist-schedule-chunk.json +113 -0
  505. offload/_root/data/findings/reviews/catalog--afar-flang-linear-parallel-ice.json +113 -0
  506. offload/_root/data/findings/reviews/catalog--afar-flang-named-critical-link.json +126 -0
  507. offload/_root/data/findings/reviews/catalog--afar-flang-ordered-wrong.json +113 -0
  508. offload/_root/data/findings/reviews/catalog--afar-flang-reduction-minus-rejected.json +113 -0
  509. offload/_root/data/findings/reviews/catalog--afar-flang-sections-in-target-ice.json +113 -0
  510. offload/_root/data/findings/reviews/catalog--afar-flang-workdistribute-ice.json +113 -0
  511. offload/_root/data/findings/reviews/catalog--c-allocate-const-mem-firstprivate-wrong.json +113 -0
  512. offload/_root/data/findings/reviews/catalog--cce-acc-character-dummy-routine-ice.json +113 -0
  513. offload/_root/data/findings/reviews/catalog--cce-acc-loop-seq-in-routine-wrong.json +113 -0
  514. offload/_root/data/findings/reviews/catalog--cce-allocators-stack-ice.json +113 -0
  515. offload/_root/data/findings/reviews/catalog--cce-c-allocate-align-link.json +113 -0
  516. offload/_root/data/findings/reviews/catalog--cce-c-allocate-allocator-modifier-rejected.json +113 -0
  517. offload/_root/data/findings/reviews/catalog--cce-c-dist-schedule-chunk.json +113 -0
  518. offload/_root/data/findings/reviews/catalog--cce-c-f-pointer-device-link.json +130 -0
  519. offload/_root/data/findings/reviews/catalog--cce-c-long-double-ice.json +217 -0
  520. offload/_root/data/findings/reviews/catalog--cce-c-map-iterator-ice.json +217 -0
  521. offload/_root/data/findings/reviews/catalog--cce-c-recursive-function-ice.json +113 -0
  522. offload/_root/data/findings/reviews/catalog--cce-c-sections-in-target-wrong.json +113 -0
  523. offload/_root/data/findings/reviews/catalog--cce-flang-allocate-in-target-crash.json +113 -0
  524. offload/_root/data/findings/reviews/catalog--cce-flang-lastprivate-parallel-in-seq-loop-wrong.json +113 -0
  525. offload/_root/data/findings/reviews/catalog--cce-flang-stop-in-target-crash.json +113 -0
  526. offload/_root/data/findings/reviews/catalog--cce-iterator-link.json +113 -0
  527. offload/_root/data/findings/reviews/catalog--cce-linear-lastprivate-ice.json +113 -0
  528. offload/_root/data/findings/reviews/catalog--cce-reduction-inscan-ice.json +113 -0
  529. offload/_root/data/findings/reviews/catalog--cce-reduction-task-link.json +113 -0
  530. offload/_root/data/findings/reviews/catalog--cce19-reduction-task-addrspacecast-ice.json +113 -0
  531. offload/_root/data/findings/reviews/catalog--cce20-c-defaultmap-private-storage-rejected.json +217 -0
  532. offload/_root/data/findings/reviews/catalog--cce20-map-self-rejected.json +204 -0
  533. offload/_root/data/findings/reviews/catalog--cce21-c-target-loop-ice.json +126 -0
  534. offload/_root/data/findings/reviews/catalog--defaultmap-present-private-array-abort.json +236 -0
  535. offload/_root/data/findings/reviews/catalog--nvhpc-acc-associate-illegal-address.json +113 -0
  536. offload/_root/data/findings/reviews/catalog--nvhpc-c-function-pointer-kernel-missing.json +268 -0
  537. offload/_root/data/findings/reviews/cce-acc-init-set-runtime-assert.json +113 -0
  538. offload/_root/data/findings/reviews/cce-acc-reduction-200-int8-scalars-wrong.json +113 -0
  539. offload/_root/data/findings/reviews/cce-acc-routine-bind-module-ice.json +113 -0
  540. offload/_root/data/findings/reviews/cce-c-dist-schedule-segv.json +113 -0
  541. offload/_root/data/findings/reviews/cce-c-map-delete-refcount.json +149 -0
  542. offload/_root/data/findings/reviews/cce-c-map-present-assert.json +126 -0
  543. offload/_root/data/findings/reviews/cce-c-openmp45-device-link.json +113 -0
  544. offload/_root/data/findings/reviews/cce-c-parallel-for-in-target.json +141 -0
  545. offload/_root/data/findings/reviews/cce-mapper-next-map-copy-back.json +208 -0
  546. offload/_root/data/findings/reviews/cce-uses-allocators-traits-omp50.json +191 -0
  547. offload/_root/data/findings/reviews/cce19-c-reduction-63-scalars-one-wrong.json +113 -0
  548. offload/_root/data/findings/reviews/cce19-target-parallel-guarded-loop.json +113 -0
  549. offload/_root/data/findings/reviews/cce19-target-parallel-single-ice.json +113 -0
  550. offload/_root/data/findings/reviews/cce21-alloc-2e32-sum-wrong.json +113 -0
  551. offload/_root/data/findings/reviews/cce21-defaultmap-aggregate-flag.json +210 -0
  552. offload/_root/data/findings/reviews/cce21-in-reduction-assumed-shape-write-lost.json +113 -0
  553. offload/_root/data/findings/reviews/cce21-in-reduction-taskwait-link.json +113 -0
  554. offload/_root/data/findings/reviews/clang-c-declare-target-to-omp52.json +113 -0
  555. offload/_root/data/findings/reviews/clang-c-linear-directive-name-hang.json +113 -0
  556. offload/_root/data/findings/reviews/clang-c-shared-declare-target-combined.json +132 -0
  557. offload/_root/data/findings/reviews/dataenv--cce-value-dummy-target-write-visible.json +113 -0
  558. offload/_root/data/findings/reviews/defaultmap-none-loop-variable.json +113 -0
  559. offload/_root/data/findings/reviews/fortran-schedule-static-in-target.json +113 -0
  560. offload/_root/data/findings/reviews/fresh--cce-common-block-name-in-map-rejected.json +113 -0
  561. offload/_root/data/findings/reviews/fresh--cce-list-directed-print-in-target-copy-crash.json +217 -0
  562. offload/_root/data/findings/reviews/fresh--cce19-acc-automatic-array-copyout-copy-crash.json +113 -0
  563. offload/_root/data/findings/reviews/fresh--cce21-combined-if-runtime-expr-loop-skipped.json +113 -0
  564. offload/_root/data/findings/reviews/fresh--nvhpc-acc-gang-worker-collapse-nested-vector-reduction-lost.json +113 -0
  565. offload/_root/data/findings/reviews/fresh--nvhpc-teams-loop-module-allocatable-assign-fort2-crash.json +113 -0
  566. offload/_root/data/findings/reviews/fuzz--1505-cce20.json +113 -0
  567. offload/_root/data/findings/reviews/fuzz--1540-afar.json +113 -0
  568. offload/_root/data/findings/reviews/fuzz--1978-cce19.json +130 -0
  569. offload/_root/data/findings/reviews/fuzz--2334-cce19.json +113 -0
  570. offload/_root/data/findings/reviews/fuzz--591-cce19.json +147 -0
  571. offload/_root/data/findings/reviews/fuzz--650-afar.json +113 -0
  572. offload/_root/data/findings/reviews/fuzz--916-afar.json +130 -0
  573. offload/_root/data/findings/reviews/fuzz--98-cce19.json +113 -0
  574. offload/_root/data/findings/reviews/fuzz--b1-121-afar.json +160 -0
  575. offload/_root/data/findings/reviews/fuzz--b2-209-cce19.json +141 -0
  576. offload/_root/data/findings/reviews/fuzz--b2-68-afar.json +113 -0
  577. offload/_root/data/findings/reviews/fuzz--b2-85-cce20.json +217 -0
  578. offload/_root/data/findings/reviews/fuzz--b3-188-cce19.json +113 -0
  579. offload/_root/data/findings/reviews/fuzz--b3-278-cce19.json +212 -0
  580. offload/_root/data/findings/reviews/fuzz--b3-54-afar.json +113 -0
  581. offload/_root/data/findings/reviews/fuzz--b3-61-cce20.json +191 -0
  582. offload/_root/data/findings/reviews/fuzz--b4-86-cce19.json +113 -0
  583. offload/_root/data/findings/reviews/fuzz--gcc-declare-reduction-module-not-found.json +113 -0
  584. offload/_root/data/findings/reviews/fuzz--gcc-target-simd-map-nontemporal-rejected.json +113 -0
  585. offload/_root/data/findings/reviews/fuzz--nvhpc-allocatable-component-implicit-map-illegal-address.json +141 -0
  586. offload/_root/data/findings/reviews/fuzz--nvhpc-assumed-length-character-dummy-map-ice.json +113 -0
  587. offload/_root/data/findings/reviews/fuzz--nvhpc-default-none-reduction-lastprivate-fort1-crash.json +113 -0
  588. offload/_root/data/findings/reviews/fuzz--nvhpc-defaultmap-firstprivate-lastprivate-ice.json +113 -0
  589. offload/_root/data/findings/reviews/fuzz--nvhpc-defaultmap-to-scalar-reduction-lost.json +113 -0
  590. offload/_root/data/findings/reviews/fuzz--nvhpc-depend-implicit-map-illegal-address.json +113 -0
  591. offload/_root/data/findings/reviews/fuzz--nvhpc-distribute-parallel-num-threads-writes-lost.json +113 -0
  592. offload/_root/data/findings/reviews/fuzz--nvhpc-end-distribute-simd-rejected.json +113 -0
  593. offload/_root/data/findings/reviews/fuzz--nvhpc-loop-character-achar-unsupported.json +113 -0
  594. offload/_root/data/findings/reviews/fuzz--nvhpc-map-always-after-map-to-not-copied-back.json +113 -0
  595. offload/_root/data/findings/reviews/fuzz--nvhpc-num-threads-reduction-identity-lost.json +113 -0
  596. offload/_root/data/findings/reviews/fuzz--nvhpc-target-parallel-firstprivate-translate-failure.json +191 -0
  597. offload/_root/data/findings/reviews/fuzz--nvhpc-target-parallel-single-hang.json +113 -0
  598. offload/_root/data/findings/reviews/fuzz--nvhpc-target-simd-collapse-translate-failure.json +113 -0
  599. offload/_root/data/findings/reviews/fuzz--nvhpc-target-simd-no-end-directive-rejected.json +113 -0
  600. offload/_root/data/findings/reviews/fuzz--par-s1-2082-gcc_g90.json +126 -0
  601. offload/_root/data/findings/reviews/fuzz--s1-2370-cce21.json +113 -0
  602. offload/_root/data/findings/reviews/fuzz--s1-2592-cce21.json +113 -0
  603. offload/_root/data/findings/reviews/fuzz--s1-3463-cce21.json +113 -0
  604. offload/_root/data/findings/reviews/fuzz--s1-6760-cce20.json +130 -0
  605. offload/_root/data/findings/reviews/fuzz--s1-6888-cce21.json +113 -0
  606. offload/_root/data/findings/reviews/fuzz--s1-7882-cce20.json +113 -0
  607. offload/_root/data/findings/reviews/fuzz--s1-8634-cce21.json +113 -0
  608. offload/_root/data/findings/reviews/fuzz--s1-91-cce21.json +113 -0
  609. offload/_root/data/findings/reviews/fuzz--s1-9443-afar.json +113 -0
  610. offload/_root/data/findings/reviews/fuzz--s1-9914-cce19.json +141 -0
  611. offload/_root/data/findings/reviews/gcc--gcc-acc-bind-device-type-rejected.json +113 -0
  612. offload/_root/data/findings/reviews/gcc--gcc-acc-detach-delete-attach-underflow.json +314 -0
  613. offload/_root/data/findings/reviews/gcc--gcc-acc-gang-dim-collapse-force-rejected.json +113 -0
  614. offload/_root/data/findings/reviews/gcc--gcc-acc-init-set-shutdown-rejected.json +113 -0
  615. offload/_root/data/findings/reviews/gcc--gcc-acc-link-in-routine-rejected.json +113 -0
  616. offload/_root/data/findings/reviews/gcc--gcc-acc-use-device-allocatable-rejected.json +113 -0
  617. offload/_root/data/findings/reviews/gcc--gcc-c-motion-mapper-rejected.json +113 -0
  618. offload/_root/data/findings/reviews/gcc--gcc-c-omp60-undocumented-rejected.json +217 -0
  619. offload/_root/data/findings/reviews/gcc--gcc-c-omp60-unimplemented-rejected.json +236 -0
  620. offload/_root/data/findings/reviews/gcc--gcc-c-target-in-task-mandatory-device-not-found.json +236 -0
  621. offload/_root/data/findings/reviews/gcc--gcc-c-uses-allocators-traits-unimplemented.json +113 -0
  622. offload/_root/data/findings/reviews/gcc--gcc-declare-mapper-rejected.json +113 -0
  623. offload/_root/data/findings/reviews/gcc--gcc-defaultmap-to-pointer-copy-back.json +217 -0
  624. offload/_root/data/findings/reviews/gcc--gcc-loop-bind-default-none-rejected.json +113 -0
  625. offload/_root/data/findings/reviews/harvest--afar-flang-strided-target-update.json +141 -0
  626. offload/_root/data/findings/reviews/harvest--cce-acc-declare-create-module-allocatable-xnack1-fault.json +113 -0
  627. offload/_root/data/findings/reviews/harvest--cce-c-implicit-struct-map-partly-present.json +217 -0
  628. offload/_root/data/findings/reviews/harvest--cce-c-strided-target-update.json +141 -0
  629. offload/_root/data/findings/reviews/harvest--cce-ftn-target-parallel-thread-query-ice.json +130 -0
  630. offload/_root/data/findings/reviews/harvest--cce-named-constant-array-declare-target-routine-rejected.json +113 -0
  631. offload/_root/data/findings/reviews/harvest--cce-use-device-ptr-c-ptr-not-converted.json +113 -0
  632. offload/_root/data/findings/reviews/harvest--cce21-declare-target-link-module-variable-write-lost.json +113 -0
  633. offload/_root/data/findings/reviews/harvest--cce21-internal-procedure-calls-internal-in-target-fault.json +158 -0
  634. offload/_root/data/findings/reviews/harvest--gcc-acc-declare-create-allocatable-not-mapped.json +204 -0
  635. offload/_root/data/findings/reviews/harvest--gcc-c-same-item-two-maps-rejected.json +143 -0
  636. offload/_root/data/findings/reviews/harvest--gcc-c-strided-section-rejected.json +164 -0
  637. offload/_root/data/findings/reviews/harvest--gcc-c-target-data-struct-pointer-section-ice.json +113 -0
  638. offload/_root/data/findings/reviews/harvest--gcc-c-target-data-two-maps-ice.json +113 -0
  639. offload/_root/data/findings/reviews/harvest--gcc-teams-simd-matmul-allocatable-ice.json +113 -0
  640. offload/_root/data/findings/reviews/harvest--nvhpc-c-target-data-if-false-use-device-ptr-garbage.json +113 -0
  641. offload/_root/data/findings/reviews/harvest--nvhpc-named-constant-array-declare-target-routine-rejected.json +126 -0
  642. offload/_root/data/findings/reviews/harvest--nvhpc-use-device-ptr-c-ptr-not-found.json +113 -0
  643. offload/_root/data/findings/reviews/harvest--nvhpc2511-target-nowait-in-parallel-for-ice.json +130 -0
  644. offload/_root/data/findings/reviews/hecbench--gcc-c-float16-array-in-target-lto-ice.json +217 -0
  645. offload/_root/data/findings/reviews/hecbench--gcc-c-swar-popcount-assembler-error.json +126 -0
  646. offload/_root/data/findings/reviews/malloc--afar-device-malloc-in-kernel-corrupts-records.json +270 -0
  647. offload/_root/data/findings/reviews/multithread-allocatable-section-maps.json +191 -0
  648. offload/_root/data/findings/reviews/nested--afar-cce-c-call-result-member-in-target-rejected.json +113 -0
  649. offload/_root/data/findings/reviews/nested--afar-cce-c-update-struct-and-member-rejected.json +126 -0
  650. offload/_root/data/findings/reviews/nested--afar-flang-pointer-root-allocatable-component-enter-data-fault.json +191 -0
  651. offload/_root/data/findings/reviews/nested--cce-c-struct-and-nested-pointee-sections-ice.json +113 -0
  652. offload/_root/data/findings/reviews/nested--cce-fortran-nested-allocatable-component-copy-fault.json +214 -0
  653. offload/_root/data/findings/reviews/nested--cce-fortran-pointer-to-type-with-allocatable-scalar-component-typed-transfer.json +191 -0
  654. offload/_root/data/findings/reviews/nested--cce-fortran-update-to-pointer-root-allocatable-scalar-component-no-accelerator-object.json +297 -0
  655. offload/_root/data/findings/reviews/nested--gcc-acc-c-exit-data-of-a-pointer-array-element-target-hangs.json +204 -0
  656. offload/_root/data/findings/reviews/nested--gcc-acc-c-parent-and-shared-pointee-one-directive.json +130 -0
  657. offload/_root/data/findings/reviews/nested--gcc-acc-c-struct-and-member-array-one-directive.json +141 -0
  658. offload/_root/data/findings/reviews/nested--gcc-c-always-on-pointer-member-section-ice.json +113 -0
  659. offload/_root/data/findings/reviews/nested--gcc-c-declare-mapper-pointer-member-section-gpu-fault.json +113 -0
  660. offload/_root/data/findings/reviews/nested--gcc-c-from-struct-and-pointee-section-rejected.json +113 -0
  661. offload/_root/data/findings/reviews/nested--gcc-fortran-pointer-component-alloc-bounds-lost.json +217 -0
  662. offload/_root/data/findings/reviews/nested--gcc-fortran-root-and-element-pointer-components-ice.json +217 -0
  663. offload/_root/data/findings/reviews/nested--nvhpc-c-pointee-before-parent-in-one-map-list-copy-fault.json +204 -0
  664. offload/_root/data/findings/reviews/nested--nvhpc-c-update-from-structure-overwrites-attached-pointer-segv.json +191 -0
  665. offload/_root/data/findings/reviews/nvhpc-c-acc-atomic-update-sum-ice.json +277 -0
  666. offload/_root/data/findings/reviews/nvhpc-c-dist-schedule-chunk-compile-hang.json +113 -0
  667. offload/_root/data/findings/reviews/nvhpc-c-map-present-ignored.json +113 -0
  668. offload/_root/data/findings/reviews/nvhpc-c-ordered-in-target-nvcpfe-crash.json +113 -0
  669. offload/_root/data/findings/reviews/nvhpc-c-parallel-for-firstprivate-in-target.json +113 -0
  670. offload/_root/data/findings/reviews/nvhpc-defaultmap-firstprivate-explicit-map.json +113 -0
  671. offload/_root/data/findings/reviews/nvhpc-defaultmap-from-allocatable-indexing.json +132 -0
  672. offload/_root/data/findings/reviews/nvhpc-depend-inoutset-ignored.json +113 -0
  673. offload/_root/data/findings/reviews/nvhpc-dist-schedule-chunk-illegal-address.json +113 -0
  674. offload/_root/data/findings/reviews/nvhpc-managed-acc-shutdown-host-access.json +113 -0
  675. offload/_root/data/findings/reviews/nvhpc-parallel-if-in-target-nvvm-ice.json +113 -0
  676. offload/_root/data/findings/reviews/oop--afar-final-dealloc-device-link.json +132 -0
  677. offload/_root/data/findings/reviews/oop--afar-pdt-length-parameter-not-implemented.json +113 -0
  678. offload/_root/data/findings/reviews/oop--cce-class-is-device-link.json +130 -0
  679. offload/_root/data/findings/reviews/oop--cce-copy-alloc-component-section-fault.json +217 -0
  680. offload/_root/data/findings/reviews/oop--cce-copy-parent-to-component-tofrom-lost.json +217 -0
  681. offload/_root/data/findings/reviews/oop--cce-copy-second-member-section-lost.json +113 -0
  682. offload/_root/data/findings/reviews/oop--cce-element-component-map-lost.json +113 -0
  683. offload/_root/data/findings/reviews/oop--cce-final-dealloc-device-abort.json +208 -0
  684. offload/_root/data/findings/reviews/oop--cce-pdt-default-mapper-rejected.json +191 -0
  685. offload/_root/data/findings/reviews/oop--cce-polymorphic-dispatch-device-link.json +247 -0
  686. offload/_root/data/findings/reviews/oop--cce-section-of-element-component-overlap.json +113 -0
  687. offload/_root/data/findings/reviews/oop--cce-select-type-guard-not-taken.json +191 -0
  688. offload/_root/data/findings/reviews/oop--cce-udr-derived-type-unsupported.json +132 -0
  689. offload/_root/data/findings/reviews/oop--gcc-acc-parent-and-member-data-rejected.json +141 -0
  690. offload/_root/data/findings/reviews/oop--gcc-pdt-length-parameter-abort.json +141 -0
  691. offload/_root/data/findings/reviews/oop--gcc-polymorphic-dispatch-abort.json +217 -0
  692. offload/_root/data/findings/reviews/oop--gcc-vtab-not-marked-for-offload.json +113 -0
  693. offload/_root/data/findings/reviews/oop--nvhpc-copy-alloc-component-illegal-address.json +113 -0
  694. offload/_root/data/findings/reviews/oop--nvhpc-copy-pdt-length-parameter-illegal-address.json +236 -0
  695. offload/_root/data/findings/reviews/oop--nvhpc-named-mapper-rejected.json +113 -0
  696. offload/_root/data/findings/reviews/oop--nvhpc-polymorphic-dispatch-translate-failure.json +223 -0
  697. offload/_root/data/findings/reviews/oop--nvhpc-polymorphism-runtime-unsupported.json +126 -0
  698. offload/_root/data/findings/reviews/oop--nvhpc-type-bound-call-rejected.json +113 -0
  699. offload/_root/data/findings/reviews/oop--nvhpc-udr-derived-type-rejected.json +113 -0
  700. offload/_root/data/findings/reviews/stress--afar-c-lastprivate-combined-target-not-mapped.json +113 -0
  701. offload/_root/data/findings/reviews/stress--afar-target-scalar-implicit-firstprivate.json +175 -0
  702. offload/_root/data/findings/reviews/stress--cce-acc-declare-create-scalar-serial-firstprivate.json +113 -0
  703. offload/_root/data/findings/reviews/stress--cce-c-distribute-lastprivate-lost.json +113 -0
  704. offload/_root/data/findings/reviews/stress--cce-c-flto-offload-dropped.json +204 -0
  705. offload/_root/data/findings/reviews/stress--cce-ftn-cif-record-split-abort.json +113 -0
  706. offload/_root/data/findings/reviews/stress--cce-lastprivate-num-threads-collapse-simd.json +113 -0
  707. offload/_root/data/findings/reviews/stress--cce-teams-reduction-many-teams-wrap.json +113 -0
  708. offload/_root/data/findings/reviews/stress--cce21-declare-target-scalar-map-write-lost.json +113 -0
  709. offload/_root/data/findings/reviews/stress--gcc-declare-target-allocatable-component-ice.json +191 -0
  710. offload/_root/data/findings/reviews/stress--nvhpc-acc-derived-type-component-not-copied.json +126 -0
  711. offload/_root/data/findings/reviews/stress--nvhpc-c-lastprivate-teams-distribute-parallel-for-lost.json +113 -0
  712. offload/_root/data/findings/reviews/stress--nvhpc-declare-target-scalar-write-lost.json +113 -0
  713. offload/_root/data/findings/reviews/stress--nvhpc-lastprivate-combined-target-not-mapped.json +113 -0
  714. offload/_root/data/findings/reviews/stress--nvhpc-target-scalar-implicit-firstprivate.json +130 -0
  715. offload/_root/data/findings/reviews/target-update-sections-in-parallel.json +113 -0
  716. offload/_root/data/findings/stress/afar-c-lastprivate-combined-target-not-mapped.c +72 -0
  717. offload/_root/data/findings/stress/afar-target-scalar-implicit-firstprivate.f90 +47 -0
  718. offload/_root/data/findings/stress/cce-acc-declare-create-scalar-serial-firstprivate.f90 +43 -0
  719. offload/_root/data/findings/stress/cce-c-distribute-lastprivate-lost.c +52 -0
  720. offload/_root/data/findings/stress/cce-c-flto-offload-dropped.c +73 -0
  721. offload/_root/data/findings/stress/cce-ftn-cif-record-split-abort.f90 +109 -0
  722. offload/_root/data/findings/stress/cce-lastprivate-num-threads-collapse-simd.f90 +66 -0
  723. offload/_root/data/findings/stress/cce-teams-reduction-many-teams-wrap.f90 +55 -0
  724. offload/_root/data/findings/stress/cce21-declare-target-scalar-map-write-lost.f90 +58 -0
  725. offload/_root/data/findings/stress/controls/gcc-declare-target-allocatable-component-control.f90 +29 -0
  726. offload/_root/data/findings/stress/gcc-declare-target-allocatable-component-ice.f90 +61 -0
  727. offload/_root/data/findings/stress/nvhpc-acc-derived-type-component-not-copied.f90 +33 -0
  728. offload/_root/data/findings/stress/nvhpc-c-lastprivate-teams-distribute-parallel-for-lost.c +62 -0
  729. offload/_root/data/findings/stress/nvhpc-declare-target-scalar-write-lost.f90 +43 -0
  730. offload/_root/data/findings/stress/nvhpc-lastprivate-combined-target-not-mapped.f90 +60 -0
  731. offload/_root/data/findings/stress/nvhpc-target-scalar-implicit-firstprivate.f90 +41 -0
  732. offload/_root/data/findings/target-update-sections-in-parallel.f90 +53 -0
  733. offload/_root/data/issues.json +1 -0
  734. offload/_root/data/search.json +1 -0
  735. offload/_root/data/vendor/checks/build.py +288 -0
  736. offload/_version.py +24 -0
  737. offload/canuse.py +88 -0
  738. offload/cli.py +52 -0
  739. offload/data.py +85 -0
  740. offload/engine/__init__.py +0 -0
  741. offload/engine/acc_c_gen.py +415 -0
  742. offload/engine/acc_gen.py +1104 -0
  743. offload/engine/acc_rules.py +656 -0
  744. offload/engine/apps.py +804 -0
  745. offload/engine/baseline.py +324 -0
  746. offload/engine/c_gen.py +883 -0
  747. offload/engine/c_program.py +913 -0
  748. offload/engine/c_rules.py +503 -0
  749. offload/engine/campaign.py +1180 -0
  750. offload/engine/campaigns/__init__.py +2 -0
  751. offload/engine/campaigns/hecbench.py +153 -0
  752. offload/engine/campaigns/nested.py +76 -0
  753. offload/engine/campaigns/oop.py +61 -0
  754. offload/engine/canary.py +275 -0
  755. offload/engine/catalog.py +860 -0
  756. offload/engine/citations.py +532 -0
  757. offload/engine/clang_oracle.py +208 -0
  758. offload/engine/combos.py +234 -0
  759. offload/engine/confirm/__init__.py +2 -0
  760. offload/engine/confirm/backlog.py +159 -0
  761. offload/engine/confirm/claims.py +423 -0
  762. offload/engine/confirm/collectors.py +665 -0
  763. offload/engine/confirm/decisions.py +202 -0
  764. offload/engine/confirm/draft.py +195 -0
  765. offload/engine/confirm/engine.py +157 -0
  766. offload/engine/confirm/execute.py +382 -0
  767. offload/engine/confirm/facts.py +467 -0
  768. offload/engine/confirm/findings.py +617 -0
  769. offload/engine/confirm/forms.py +145 -0
  770. offload/engine/confirm/ingest.py +372 -0
  771. offload/engine/confirm/jobs.py +215 -0
  772. offload/engine/confirm/legality.py +323 -0
  773. offload/engine/confirm/machines.py +254 -0
  774. offload/engine/confirm/minimize.py +268 -0
  775. offload/engine/confirm/model.py +249 -0
  776. offload/engine/confirm/ports.py +107 -0
  777. offload/engine/confirm/programs.py +222 -0
  778. offload/engine/confirm/registry.py +151 -0
  779. offload/engine/confirm/regress.py +278 -0
  780. offload/engine/confirm/rules.py +565 -0
  781. offload/engine/confirm/store.py +63 -0
  782. offload/engine/confirm/triage.py +838 -0
  783. offload/engine/confirm/validate.py +607 -0
  784. offload/engine/confirm/witness.py +355 -0
  785. offload/engine/corpus_check.py +388 -0
  786. offload/engine/coverage.py +318 -0
  787. offload/engine/dataenv_gen.py +1318 -0
  788. offload/engine/dataenv_rules.py +278 -0
  789. offload/engine/devtemps.py +146 -0
  790. offload/engine/expected.py +2559 -0
  791. offload/engine/f2c.py +1783 -0
  792. offload/engine/finding_claims.py +330 -0
  793. offload/engine/finding_header.py +229 -0
  794. offload/engine/finding_rows.py +382 -0
  795. offload/engine/flang_oracle.py +299 -0
  796. offload/engine/fsource.py +620 -0
  797. offload/engine/fuzz.py +2455 -0
  798. offload/engine/fuzz_base.py +2016 -0
  799. offload/engine/fuzz_campaign.py +592 -0
  800. offload/engine/fuzz_exec.py +798 -0
  801. offload/engine/fuzz_min.py +1049 -0
  802. offload/engine/fuzz_profile.py +340 -0
  803. offload/engine/fuzz_report.py +1270 -0
  804. offload/engine/fuzz_steer.py +181 -0
  805. offload/engine/gate.py +1013 -0
  806. offload/engine/gate_report.py +711 -0
  807. offload/engine/gate_run.py +118 -0
  808. offload/engine/gate_stored.py +466 -0
  809. offload/engine/gen.py +1114 -0
  810. offload/engine/gen_templates.py +2583 -0
  811. offload/engine/grammar.py +695 -0
  812. offload/engine/harness.py +1472 -0
  813. offload/engine/harvest/__init__.py +3 -0
  814. offload/engine/harvest/c_runtime.py +465 -0
  815. offload/engine/harvest/checks.py +534 -0
  816. offload/engine/harvest/convert.py +784 -0
  817. offload/engine/harvest/f_runtime.py +668 -0
  818. offload/engine/harvest/filters.py +338 -0
  819. offload/engine/harvest/history.py +122 -0
  820. offload/engine/harvest/inventory.py +399 -0
  821. offload/engine/harvest2/__init__.py +5 -0
  822. offload/engine/harvest2/aomp.py +119 -0
  823. offload/engine/harvest2/examples.py +116 -0
  824. offload/engine/harvest2/gomp.py +679 -0
  825. offload/engine/harvest2/hand.py +150 -0
  826. offload/engine/harvest2/split.py +78 -0
  827. offload/engine/harvest_known/__init__.py +2 -0
  828. offload/engine/harvest_known/apps.py +65 -0
  829. offload/engine/harvest_known/cases.py +128 -0
  830. offload/engine/harvest_known/centres.py +184 -0
  831. offload/engine/harvest_known/forum.py +180 -0
  832. offload/engine/harvest_known/relnotes.py +42 -0
  833. offload/engine/harvest_known/textscan.py +107 -0
  834. offload/engine/hdrwrap.py +42 -0
  835. offload/engine/hecbench.py +568 -0
  836. offload/engine/hecbench_report.py +265 -0
  837. offload/engine/hecbench_run.py +483 -0
  838. offload/engine/idioms.py +1427 -0
  839. offload/engine/kbody_cites.py +81 -0
  840. offload/engine/kbody_emit.py +949 -0
  841. offload/engine/kbody_gen.py +795 -0
  842. offload/engine/legality_review.py +236 -0
  843. offload/engine/localcfg.py +58 -0
  844. offload/engine/malloc_dd.py +267 -0
  845. offload/engine/mutate.py +1933 -0
  846. offload/engine/nested_cites.py +196 -0
  847. offload/engine/nested_emit.py +789 -0
  848. offload/engine/nested_gen.py +1721 -0
  849. offload/engine/offload_scope.py +197 -0
  850. offload/engine/ompvv.py +624 -0
  851. offload/engine/oop_gen.py +2249 -0
  852. offload/engine/prerun.py +1435 -0
  853. offload/engine/program_source.py +739 -0
  854. offload/engine/provenance.py +103 -0
  855. offload/engine/reduce.py +2098 -0
  856. offload/engine/report.py +3374 -0
  857. offload/engine/root.py +33 -0
  858. offload/engine/rules.py +4256 -0
  859. offload/engine/run_matrix.py +325 -0
  860. offload/engine/site/__init__.py +1 -0
  861. offload/engine/site/columns.py +53 -0
  862. offload/engine/site/data.py +648 -0
  863. offload/engine/site/header.py +228 -0
  864. offload/engine/site/inputs.py +115 -0
  865. offload/engine/site/matrix.py +434 -0
  866. offload/engine/site/scrub.py +294 -0
  867. offload/engine/skeleton.py +121 -0
  868. offload/engine/spec_text.py +242 -0
  869. offload/engine/stress.py +4122 -0
  870. offload/engine/stress_c.py +1000 -0
  871. offload/engine/stress_exec.py +805 -0
  872. offload/engine/stress_min.py +248 -0
  873. offload/engine/stress_report.py +552 -0
  874. offload/engine/textclean.py +97 -0
  875. offload/engine/toolchains.py +1070 -0
  876. offload/engine/transforms.py +511 -0
  877. offload/engine/usage.py +1252 -0
  878. offload/engine/widen.py +673 -0
  879. offload/engine/widen_progs.py +2396 -0
  880. offload/issues.py +146 -0
  881. offtarget-0.1.0.dist-info/METADATA +86 -0
  882. offtarget-0.1.0.dist-info/RECORD +886 -0
  883. offtarget-0.1.0.dist-info/WHEEL +4 -0
  884. offtarget-0.1.0.dist-info/entry_points.txt +2 -0
  885. offtarget-0.1.0.dist-info/licenses/LICENSE +21 -0
  886. offtarget-0.1.0.dist-info/licenses/THIRD_PARTY_NOTICES.md +20 -0
@@ -0,0 +1,3131 @@
1
+ # Restriction rules for the first slice (OpenMP, Fortran, target offload).
2
+ #
3
+ # Layer 3 of the catalog: restrictions the context-free clause grammar does
4
+ # not express. Read by offload/engine/rules.py (load_rules); the schema is in that
5
+ # module's docstring. In short, each entry is
6
+ # id <construct-or-topic>-<kind>-<nnn>; the rule id of version V is
7
+ # OMP<V>-<id> (OMP52-teams-nesting-001)
8
+ # (versions 50, 52, 60; a rule without a 50 entry has no 5.0
9
+ # counterpart, see docs/tooling/omp5-vs-52.md)
10
+ # check static (decidable from the source text) or runtime (not; `why`
11
+ # says why)
12
+ # status provisional until the project owner reviews it
13
+ # predicate a function in offload/engine/rules.py (null for runtime rules)
14
+ # example a small illegal example, for the review document
15
+ # notes context: what a single-change illegal variant needs so that
16
+ # only this rule fires (for the generator), and any narrowing
17
+ # spec per version: the citation ("OpenMP <ver> §<sec>, p.<n>", the
18
+ # printed page where the sentence starts), the spec sentence
19
+ # verbatim, and optional `also` citations
20
+ # lang optional: f90 or c when the rule holds in one
21
+ # language only (a Fortran-only sentence or construct, or a
22
+ # C/C++ sentence); absent: both (offload.engine.rules.Rule.lang)
23
+ # Kinds: nesting, placement, loop, map, dsa, clause, storage, body, exec
24
+ # (runtime).
25
+ # The inventory of every restriction sentence of the slice and the rules added for it
26
+ # is in catalog/omp/rules_coverage.yaml.
27
+
28
+ rules:
29
+
30
+ # --- nesting and placement --------------------------------------------------------
31
+
32
+ - id: teams-nesting-001
33
+ check: static
34
+ status: provisional
35
+ predicate: teams_strictly_nested_in_target
36
+ example: "!$omp parallel / !$omp teams / ... / !$omp end teams / !$omp end parallel"
37
+ notes: "Isolation: enclose a teams construct in a parallel (or target data) construct, not inside a target; the teams body holds only statements."
38
+ spec:
39
+ 50:
40
+ citation: "OpenMP 5.0 §2.7, p.85"
41
+ text: "A teams region can only be strictly nested within the implicit parallel region or a target region."
42
+ 52:
43
+ citation: "OpenMP 5.2 §10.2, p.232"
44
+ text: "A teams region must be strictly nested within the implicit parallel region that surrounds the whole OpenMP program or a target region."
45
+ 60:
46
+ citation: "OpenMP 6.0 §12.2, p.395"
47
+ text: "A teams region must be a strictly nested region of the implicit parallel region that surrounds the whole OpenMP program or a target region."
48
+
49
+ - id: teams-nesting-002
50
+ check: static
51
+ status: provisional
52
+ predicate: target_contains_only_teams
53
+ example: "!$omp target / x = 1 / !$omp teams / ... / !$omp end teams / !$omp end target"
54
+ notes: "Isolation: add one statement inside a target construct next to its only nested teams construct."
55
+ spec:
56
+ 50:
57
+ citation: "OpenMP 5.0 §2.7, p.85"
58
+ text: "If a teams construct is nested within a target construct, that target construct must contain no statements, declarations or directives outside of the teams construct."
59
+ 52:
60
+ citation: "OpenMP 5.2 §10.2, p.232"
61
+ text: "If a teams region is nested inside a target region, the corresponding target construct must not contain any statements, declarations or directives outside of the corresponding teams construct."
62
+ 60:
63
+ citation: "OpenMP 6.0 §12.2, p.395"
64
+ text: "If a teams region is nested inside a target region, the corresponding target construct must not contain any statements, declarations or directives outside of the corresponding teams construct."
65
+
66
+ - id: teams-nesting-003
67
+ check: static
68
+ status: provisional
69
+ predicate: teams_nested_regions
70
+ example: "!$omp teams / !$omp task / ... / !$omp end task / !$omp end teams"
71
+ notes: "Isolation: put a task (or single) construct directly in a teams construct that is not nested in a target. A device construct (target update) in a target teams construct also fires target-nesting-001; use a non-device construct."
72
+ spec:
73
+ 50:
74
+ citation: "OpenMP 5.0 §2.7, p.85"
75
+ text: "distribute, distribute simd, distribute parallel worksharing-loop, distribute parallel worksharing-loop SIMD, parallel regions, including any parallel regions arising from combined constructs, omp_get_num_teams() regions, and omp_get_team_num() regions are the only OpenMP regions that may be strictly nested inside the teams region."
76
+ also: ["OpenMP 5.0 §2.13.15, p.202", "OpenMP 5.0 §2.9.5, p.131"]
77
+ 52:
78
+ citation: "OpenMP 5.2 §10.2, p.232"
79
+ text: "distribute regions, including any distribute regions arising from composite constructs, parallel regions, including any parallel regions arising from combined constructs, loop regions, omp_get_num_teams() regions, and omp_get_team_num() regions are the only OpenMP regions that may be strictly nested inside the teams region."
80
+ 60:
81
+ citation: "OpenMP 6.0 §12.2, p.396"
82
+ text: "Only regions that are generated by teams-nestable constructs or teams-nestable routines may be strictly nested regions of teams regions."
83
+ also: ["OpenMP 6.0 §12.1, p.384", "OpenMP 6.0 §13.7, p.420", "OpenMP 6.0 §13.8, p.423"]
84
+
85
+ - id: distribute-nesting-001
86
+ check: static
87
+ status: provisional
88
+ predicate: distribute_strictly_nested_in_teams
89
+ example: "!$omp parallel / !$omp distribute / do ... / !$omp end parallel"
90
+ notes: "Isolation: put the distribute in a parallel construct (not in teams). An orphaned distribute is never flagged."
91
+ spec:
92
+ 50:
93
+ citation: "OpenMP 5.0 §2.9.4.1, p.123"
94
+ text: "The region corresponding to the distribute construct must be strictly nested inside a teams region."
95
+ 52:
96
+ citation: "OpenMP 5.2 §11.6, p.255"
97
+ text: "The region that corresponds to the distribute construct must be strictly nested inside a teams region."
98
+ 60:
99
+ citation: "OpenMP 6.0 §13.7, p.421"
100
+ text: "The region that corresponds to the distribute construct must be a strictly nested region of a teams region."
101
+
102
+ - id: loop-nesting-001
103
+ check: static
104
+ status: provisional
105
+ predicate: loop_orphan_has_bind
106
+ example: "!$omp loop / do ... (not nested in any construct, no bind clause)"
107
+ notes: "Isolation: an orphaned loop directive (not inside any construct) without bind; keep lastprivate off or on the loop variable."
108
+ spec:
109
+ 50:
110
+ citation: "OpenMP 5.0 §2.9.5, p.131"
111
+ text: "If a loop construct is not nested inside another OpenMP construct and it appears in a procedure, the bind clause must be present."
112
+ 52:
113
+ citation: "OpenMP 5.2 §11.7, p.258"
114
+ text: "If a loop construct is not nested inside another OpenMP construct then the bind clause must be present."
115
+ 60:
116
+ citation: "OpenMP 6.0 §13.8, p.424"
117
+ text: "If a loop construct is not nested inside another construct then the bind clause must be present."
118
+
119
+ - id: loop-nesting-002
120
+ check: static
121
+ status: provisional
122
+ predicate: loop_bind_teams_in_teams
123
+ example: "!$omp parallel / !$omp loop bind(teams) / do ... / !$omp end parallel"
124
+ notes: "Isolation: loop bind(teams) directly inside a parallel construct. An orphaned loop bind(teams) is never flagged."
125
+ spec:
126
+ 50:
127
+ citation: "OpenMP 5.0 §2.9.5, p.131"
128
+ text: "If the bind clause is present and binding is teams, the loop region corresponding to the loop construct must be strictly nested inside a teams region."
129
+ 52:
130
+ citation: "OpenMP 5.2 §11.7.1, p.259"
131
+ text: "If teams is specified as binding then the corresponding loop region must be strictly nested inside a teams region."
132
+ 60:
133
+ citation: "OpenMP 6.0 §13.8.1, p.425"
134
+ text: "If teams is specified as binding then the corresponding loop region must be a strictly nested region of a teams region."
135
+
136
+ - id: target-nesting-001
137
+ check: static
138
+ status: provisional
139
+ predicate: device_construct_in_target
140
+ example: "!$omp target / !$omp target update to(a) / !$omp end target"
141
+ notes: "Isolation: target update (or target data, enter/exit data) inside a bare target construct. Inside target teams it also fires teams-nesting-003."
142
+ spec:
143
+ 50:
144
+ citation: "OpenMP 5.0 §2.12.5, p.174"
145
+ text: "If a target update, target data, target enter data, or target exit data construct is encountered during execution of a target region, the behavior is unspecified."
146
+ also: ["OpenMP 5.0 §2.20, p.329"]
147
+ 52:
148
+ citation: "OpenMP 5.2 §13.8, p.286"
149
+ text: "Device-affecting constructs, other than target constructs for which the ancestor device-modifier is specified, must not be encountered during execution of a target region."
150
+ 60:
151
+ citation: "OpenMP 6.0 §15.8, p.462"
152
+ text: "Device-affecting constructs, other than target constructs for which the ancestor device-modifier is specified, must not be encountered during execution of a target region."
153
+
154
+ - id: order-nesting-001
155
+ check: static
156
+ status: provisional
157
+ predicate: order_concurrent_nesting
158
+ example: "!$omp parallel do order(concurrent) / do ... / !$omp task / ... / !$omp end task / end do"
159
+ notes: "Isolation: a task construct in the loop body of parallel do order(concurrent)."
160
+ spec:
161
+ 50:
162
+ citation: "OpenMP 5.0 §2.9.2, p.108"
163
+ text: "If an order(concurrent) clause is present, all restrictions from the loop construct with an order(concurrent) clause also apply."
164
+ also: ["OpenMP 5.0 §2.9.5, p.131", "OpenMP 5.0 §2.9.3.1, p.113"]
165
+ 52:
166
+ citation: "OpenMP 5.2 §10.3, p.234"
167
+ text: "The only constructs that may be encountered inside a region that corresponds to a construct with an order clause that specifies concurrent are the loop construct, the parallel construct, the simd construct, and combined constructs for which the first construct is a parallel construct."
168
+ 60:
169
+ citation: "OpenMP 6.0 §12.3, p.398"
170
+ text: "Only regions that correspond to order-concurrent-nestable constructs or order-concurrent-nestable routines may be strictly nested regions of regions that correspond to constructs on which the order clause is specified with concurrent as the ordering argument."
171
+ also: ["OpenMP 6.0 §12.1, p.384", "OpenMP 6.0 §12.4, p.399", "OpenMP 6.0 §13.8, p.423", "OpenMP 6.0 §17.8.5, p.494"]
172
+
173
+ - id: declaretarget-placement-001
174
+ lang: f90
175
+ check: static
176
+ status: provisional
177
+ predicate: declare_target_in_specification_part
178
+ example: "!$omp target / !$omp declare target (a) / ... / !$omp end target"
179
+ notes: "Isolation: declare target (a) inside a parallel or target construct (not in teams)."
180
+ spec:
181
+ 50:
182
+ citation: "OpenMP 5.0 §2.12.7, p.184"
183
+ text: "Any declare target directive with clauses must appear in a specification part of a subroutine subprogram, function subprogram, program or module."
184
+ 52:
185
+ citation: "OpenMP 5.2 §7.8.1, p.206"
186
+ text: "If an extended list item is a variable name, the directive must appear in the specification part of a subroutine subprogram, function subprogram, program or module."
187
+ also: ["OpenMP 5.2 §7.8.1, p.206"]
188
+ 60:
189
+ citation: "OpenMP 6.0 §9.9.1, p.348"
190
+ text: "If a list item in extended-list is a variable, the directive must appear in the specification part in which the variable is declared."
191
+ also: ["OpenMP 6.0 §9.9.1, p.348"]
192
+
193
+ - id: requires-placement-001
194
+ lang: f90
195
+ check: static
196
+ status: provisional
197
+ predicate: requires_in_specification_part
198
+ example: "!$omp parallel / !$omp requires atomic_default_mem_order(seq_cst) / !$omp end parallel"
199
+ notes: "Isolation: requires atomic_default_mem_order(...) inside a parallel construct. At 5.2 a requires with unified_shared_memory, unified_address or reverse_offload inside a target also fires requires-placement-002."
200
+ spec:
201
+ 50:
202
+ citation: "OpenMP 5.0 §1.2.2, p.3"
203
+ text: "An OpenMP directive that may only be placed in a declarative context."
204
+ also: ["OpenMP 5.0 §2.4, p.60"]
205
+ 52:
206
+ citation: "OpenMP 5.2 §8.2, p.211"
207
+ text: "The requires directive must appear in the specification part of a program unit, after any USE statement, any IMPORT statement, and any IMPLICIT statement, unless the directive appears by referencing a module and each clause already appeared with the same arguments in the specification part of the program unit."
208
+ 60:
209
+ citation: "OpenMP 6.0 §10.5, p.356"
210
+ text: "The requires directive must appear in the specification part of a program unit, either after all USE statements, IMPORT statements, and IMPLICIT statements or by referencing a module."
211
+
212
+ - id: requires-placement-002
213
+ check: static
214
+ status: provisional
215
+ predicate: requires_before_device_constructs
216
+ example: "!$omp target / ... / !$omp end target / !$omp requires unified_shared_memory"
217
+ notes: "Isolation: a requires unified_shared_memory at the top of the program unit, after a complete target construct, not nested in a construct (nested also fires requires-placement-001)."
218
+ spec:
219
+ 50:
220
+ citation: "OpenMP 5.0 §2.4, p.63"
221
+ text: "A requires directive with a unified_address, unified_shared_memory, or reverse_offload clause must appear lexically before any device constructs or device routines."
222
+ 52:
223
+ citation: "OpenMP 5.2 §8.2, p.211"
224
+ text: "Any requires directive that specifies a reverse_offload, unified_address, or unified_shared_memory requirement must appear lexically before any device constructs or device routines."
225
+
226
+ # --- loop association --------------------------------------------------------------
227
+
228
+ - id: assoc-loop-001
229
+ check: static
230
+ status: provisional
231
+ predicate: loop_nest_follows
232
+ example: "!$omp parallel do / x = 1"
233
+ notes: "Isolation: replace the DO loop after a loop directive by a plain statement (and drop its end directive)."
234
+ spec:
235
+ 50:
236
+ citation: "OpenMP 5.0 §2.9.2, p.102"
237
+ text: "Specifically, all associated do-loops must have canonical loop form (see Section 2.9.1 on page 95)."
238
+ also: ["OpenMP 5.0 §1.2.3, p.8"]
239
+ 52:
240
+ citation: "OpenMP 5.2 §3.1, p.52"
241
+ text: "Loop-associated directives are block-associated directives for which the associated structured-block is loop-nest, a canonical loop nest."
242
+ 60:
243
+ citation: "OpenMP 6.0 §5.1, p.153"
244
+ text: "Loop-nest-associated directives are block-associated directives for which the associated structured-block is loop-nest, a canonical loop nest."
245
+
246
+ - id: collapse-loop-001
247
+ check: static
248
+ status: provisional
249
+ predicate: collapse_within_depth
250
+ example: "!$omp parallel do collapse(2) / do i = 1, n / ... / end do (a single loop)"
251
+ notes: "Isolation: collapse(n) with n one more than the DO nest depth; no loop-transforming directive inside the nest (depth unknown, never flagged)."
252
+ spec:
253
+ 50:
254
+ citation: "OpenMP 5.0 §2.9.2, p.104"
255
+ text: "If the value of the parameter in the collapse or ordered clause is larger than the number of nested loops following the construct, the behavior is unspecified."
256
+ also: ["OpenMP 5.0 §2.9.2, p.107"]
257
+ 52:
258
+ citation: "OpenMP 5.2 §4.4.3, p.93"
259
+ text: "n must not evaluate to a value greater than the depth of the associated loop nest."
260
+ 60:
261
+ citation: "OpenMP 6.0 §6.4.5, p.206"
262
+ text: "n must not evaluate to a value greater than the loop nest depth."
263
+
264
+ - id: loop-dsa-001
265
+ check: static
266
+ status: provisional
267
+ predicate: loop_lastprivate_iteration_variable
268
+ example: "!$omp loop bind(thread) lastprivate(x) / do i = 1, n / ..."
269
+ notes: "Isolation: lastprivate of a non-loop variable on a loop construct with bind (or nested in teams/parallel)."
270
+ spec:
271
+ 50:
272
+ citation: "OpenMP 5.0 §2.9.5, p.131"
273
+ text: "A list item may not appear in a lastprivate clause unless it is the loop iteration variable of a loop that is associated with the construct."
274
+ 52:
275
+ citation: "OpenMP 5.2 §11.7, p.257"
276
+ text: "A list item may not appear in a lastprivate clause unless it is the loop iteration variable of a loop that is associated with the construct."
277
+ 60:
278
+ citation: "OpenMP 6.0 §13.8, p.424"
279
+ text: "A list item must not appear in a lastprivate clause unless it is the loop-iteration variable of an affected loop."
280
+
281
+ # --- data mapping --------------------------------------------------------------------
282
+
283
+ - id: target-map-001
284
+ check: static
285
+ status: provisional
286
+ predicate: target_map_types
287
+ example: "!$omp target map(release: a)"
288
+ notes: "Isolation (5.2): map(release: a) or map(delete: a) on target or a target compound."
289
+ spec:
290
+ 50:
291
+ citation: "OpenMP 5.0 §2.12.5, p.174"
292
+ text: "A map-type in a map clause must be to, from, tofrom or alloc."
293
+ 52:
294
+ citation: "OpenMP 5.2 §13.8, p.286"
295
+ text: "A map-type in a map clause must be to, from, tofrom or alloc."
296
+
297
+ - id: targetdata-map-001
298
+ check: static
299
+ status: provisional
300
+ predicate: target_data_map_types
301
+ example: "!$omp target data map(delete: a)"
302
+ notes: "Isolation (5.2): map(release: a) or map(delete: a) on target data."
303
+ spec:
304
+ 50:
305
+ citation: "OpenMP 5.0 §2.12.2, p.163"
306
+ text: "A map-type in a map clause must be to, from, tofrom or alloc."
307
+ 52:
308
+ citation: "OpenMP 5.2 §13.5, p.280"
309
+ text: "A map-type in a map clause must be to, from, tofrom or alloc."
310
+
311
+ - id: targetenterdata-map-001
312
+ check: static
313
+ status: provisional
314
+ predicate: enter_data_map_entering
315
+ example: "!$omp target enter data map(from: a)"
316
+ notes: "Isolation: map(from: a) (5.2 also release/delete; 6.0 also release) on target enter data."
317
+ spec:
318
+ 50:
319
+ citation: "OpenMP 5.0 §2.12.3, p.166"
320
+ text: "A map-type must be specified in all map clauses and must be either to or alloc."
321
+ 52:
322
+ citation: "OpenMP 5.2 §13.6, p.281"
323
+ text: "All map clauses must be map-entering."
324
+ also: ["OpenMP 5.2 §5.8.3, p.151"]
325
+ 60:
326
+ citation: "OpenMP 6.0 §15.5, p.455"
327
+ text: "All map clauses must be map-entering clauses."
328
+ also: ["OpenMP 6.0 §7.9.1, p.274", "OpenMP 6.0 §7.9.1, p.275"]
329
+
330
+ - id: targetexitdata-map-001
331
+ check: static
332
+ status: provisional
333
+ predicate: exit_data_map_exiting
334
+ example: "!$omp target exit data map(to: a)"
335
+ notes: "Isolation: map(to: a) (5.2 also alloc; 6.0 also alloc) on target exit data."
336
+ spec:
337
+ 50:
338
+ citation: "OpenMP 5.0 §2.12.4, p.169"
339
+ text: "A map-type must be specified in all map clauses and must be either from, release, or delete."
340
+ 52:
341
+ citation: "OpenMP 5.2 §13.7, p.283"
342
+ text: "All map clauses must be a map-exiting."
343
+ also: ["OpenMP 5.2 §5.8.3, p.151"]
344
+ 60:
345
+ citation: "OpenMP 6.0 §15.6, p.457"
346
+ text: "All map clauses must be map-exiting clauses."
347
+ also: ["OpenMP 6.0 §7.9.1, p.274", "OpenMP 6.0 §7.9.1, p.275"]
348
+
349
+ - id: mapitem-map-001
350
+ check: static
351
+ status: provisional
352
+ predicate: map_same_item_same_mapper
353
+ example: "!$omp target map(mapper(m), to: a) map(from: a)"
354
+ notes: "Isolation: the same item in two map clauses of one construct, one with mapper(m)."
355
+ spec:
356
+ 52:
357
+ citation: "OpenMP 5.2 §5.8.3, p.156"
358
+ text: "If the same list item appears more than once in map clauses on the same construct, the map clauses must specify the same mapper modifier."
359
+ 60:
360
+ citation: "OpenMP 6.0 §7.9.6, p.286"
361
+ text: "If the same list item appears more than once in map clauses on the same construct, the map clauses must specify the same mapper modifier."
362
+
363
+ - id: mapitem-map-002
364
+ check: static
365
+ status: provisional
366
+ predicate: map_whole_and_part
367
+ example: "!$omp target map(to: a) map(from: a(1:n))"
368
+ notes: "Context requirement (5.2): the base variable needs a visible non-POINTER declaration in the source, with no USE statement between the directive and the declaration (or in the declaring unit) that may supply the name; for s%c, s must be declared type(t) with t defined in the source (resolved from the unit declaring s; nested components from the unit defining each type) and c non-POINTER. A POINTER, undeclared or possibly use-associated base (or type) never fires. Isolation: real, allocatable :: a(:) then map(to: a) map(from: a(1:n))."
369
+ spec:
370
+ 50:
371
+ citation: "OpenMP 5.0 §2.19.7.1, p.323"
372
+ text: "List items of the map clauses on the same construct must not share original storage unless they are the same variable or array section."
373
+ 52:
374
+ citation: "OpenMP 5.2 §5.8.3, p.156"
375
+ text: "Two list items of the map clauses on the same construct must not share original storage unless they are the same list item or unless one is the containing structure of the other."
376
+
377
+ - id: mapitem-map-003
378
+ check: static
379
+ status: provisional
380
+ predicate: map_self_consistent
381
+ example: "!$omp target map(self: a) map(to: a(1:n))"
382
+ notes: "Isolation (6.0): map(self: a) plus map(to: a(1:n)) without self."
383
+ spec:
384
+ 60:
385
+ citation: "OpenMP 6.0 §7.9.6, p.287"
386
+ text: "If a list item appears in a map clause with the self-modifier, any other list item in a map clause on the same construct that has the same base variable or base pointer must also be specified with the self-modifier."
387
+
388
+ - id: target-dsa-001
389
+ check: static
390
+ status: provisional
391
+ predicate: target_dsa_not_mapped
392
+ example: "!$omp target map(to: a) firstprivate(a)"
393
+ notes: "Isolation: firstprivate(a) on a bare target that also maps a."
394
+ spec:
395
+ 50:
396
+ citation: "OpenMP 5.0 §2.19.7.1, p.321"
397
+ text: "A list item cannot appear in both a map clause and a data-sharing attribute clause on the same construct unless the construct is a combined construct."
398
+ 52:
399
+ citation: "OpenMP 5.2 §13.8, p.286"
400
+ text: "A list item in a data-sharing attribute clause that is specified on a target construct must not have the same base variable as a list item in a map clause on the construct."
401
+ 60:
402
+ citation: "OpenMP 6.0 §15.8, p.463"
403
+ text: "A list item in a data-sharing attribute clause that is specified on a target construct must not have the same base variable as a list item in a map clause on the construct."
404
+
405
+ - id: defaultmap-map-001
406
+ check: static
407
+ status: provisional
408
+ predicate: defaultmap_category_once
409
+ example: "!$omp target defaultmap(tofrom: scalar) defaultmap(firstprivate: scalar)"
410
+ notes: "Defaultmap may repeat on a construct (spec_overrides.yaml repeatable_clauses), so this rule checks parsed source; tests/engine/test_generators.py."
411
+ spec:
412
+ 50:
413
+ citation: "OpenMP 5.0 §2.12.5, p.174"
414
+ text: "At most one defaultmap clause for each category can appear on the directive."
415
+ 52:
416
+ citation: "OpenMP 5.2 §5.8.7, p.162"
417
+ text: "A given variable-category may be specified in at most one defaultmap clause on a construct."
418
+ 60:
419
+ citation: "OpenMP 6.0 §7.9.9, p.292"
420
+ text: "A given variable-category may be specified in at most one defaultmap clause on a construct."
421
+
422
+ - id: defaultmap-map-002
423
+ check: static
424
+ status: provisional
425
+ predicate: defaultmap_all_alone
426
+ example: "!$omp target defaultmap(tofrom: all) defaultmap(firstprivate: scalar)"
427
+ notes: "Defaultmap may repeat on a construct (spec_overrides.yaml repeatable_clauses), so this rule checks parsed source; tests/engine/test_generators.py."
428
+ spec:
429
+ 52:
430
+ citation: "OpenMP 5.2 §5.8.7, p.162"
431
+ text: "If a defaultmap clause specifies the all variable-category, no other defaultmap clause may appear on the construct."
432
+ 60:
433
+ citation: "OpenMP 6.0 §7.9.9, p.292"
434
+ text: "If a defaultmap clause specifies the all variable-category, no other defaultmap clause may appear on the construct."
435
+
436
+ - id: usedevice-clause-001
437
+ check: static
438
+ status: provisional
439
+ predicate: use_device_no_structure_element
440
+ example: "!$omp target data map(to: s) use_device_addr(s%a)"
441
+ notes: "Isolation (5.2): use_device_addr(s%a) on target data (a structure component, not mapped twice)."
442
+ spec:
443
+ 52:
444
+ citation: "OpenMP 5.2 §5.4.10, p.124"
445
+ text: "Each list item must not be a structure element."
446
+ also: ["OpenMP 5.2 §5.4.8, p.122"]
447
+
448
+ - id: usedevice-clause-002
449
+ check: static
450
+ status: provisional
451
+ predicate: use_device_addr_section_base
452
+ example: "!$omp target data map(to: s) use_device_addr(s%a(1:n))"
453
+ notes: "Isolation (6.0): use_device_addr(s%a(1:n)) on target data."
454
+ spec:
455
+ 60:
456
+ citation: "OpenMP 6.0 §7.5.10, p.239"
457
+ text: "If a list item is an array section, the array base must be a base language identifier."
458
+
459
+ # --- clause arguments --------------------------------------------------------------------
460
+
461
+ - id: dnm-clause-001
462
+ check: static
463
+ status: provisional
464
+ predicate: dnm_names_constituent
465
+ example: "!$omp target teams num_teams(parallel do: 4) (6.0); !$omp target simd if(parallel: x)"
466
+ notes: "Isolation: a directive-name modifier naming a directive that is not a constituent (5.2: if(parallel: x) on target simd; 6.0: num_teams(parallel do: 4) on target teams)."
467
+ spec:
468
+ 52:
469
+ citation: "OpenMP 5.2 §3.4, p.72"
470
+ text: "The directive-name-modifier must specify the directive-name of the construct or of a constituent construct of the directive-specification on which the if clause appears."
471
+ 60:
472
+ citation: "OpenMP 6.0 §5.4, p.174"
473
+ text: "The directive-name-modifier must specify the directive name of either the directive on which the clause appears or a constituent directive of that directive."
474
+
475
+ - id: if-clause-001
476
+ check: static
477
+ status: provisional
478
+ predicate: if_once_per_constituent
479
+ example: "!$omp target teams if(target: x) if(x)"
480
+ notes: "Isolation: if(target: x) plus if(y) without modifier on target parallel."
481
+ spec:
482
+ 50:
483
+ citation: "OpenMP 5.0 §2.13.25, p.216"
484
+ text: "If any if clause on the directive includes a directive-name-modifier then all if clauses on the directive must include a directive-name-modifier."
485
+ also: ["OpenMP 5.0 §2.13.16, p.204", "OpenMP 5.0 §2.13.17, p.206", "OpenMP 5.0 §2.13.18, p.207", "OpenMP 5.0 §2.13.26, p.217", "OpenMP 5.0 §2.6, p.77", "OpenMP 5.0 §2.12.5, p.174"]
486
+ 52:
487
+ citation: "OpenMP 5.2 §3.4, p.72"
488
+ text: "At most one if clause can be specified that applies to the semantics of any construct or constituent construct of a directive-specification."
489
+ 60:
490
+ citation: "OpenMP 6.0 §5.5, p.179"
491
+ text: "At most one if clause can be specified that applies to the semantics of any construct or constituent construct of a directive-specification."
492
+
493
+ - id: threadlimit-clause-001
494
+ check: static
495
+ status: provisional
496
+ predicate: thread_limit_positive
497
+ example: "!$omp target teams distribute parallel do thread_limit(-1)"
498
+ notes: "Isolation: thread_limit(0) or a negative literal; a non-literal is never flagged."
499
+ spec:
500
+ 50:
501
+ citation: "OpenMP 5.0 §2.7, p.85"
502
+ text: "The thread_limit expression must evaluate to a positive integer value."
503
+ 52:
504
+ citation: "OpenMP 5.2 §3.2, p.60"
505
+ text: "A positive argument or parameter must be greater than zero; a non-negative argument or parameter must be greater than or equal to zero."
506
+ also: ["OpenMP 5.2 §13.3, p.277"]
507
+ 60:
508
+ citation: "OpenMP 6.0 §5.2, p.161"
509
+ text: "An argument or parameter with the positive property must be greater than zero."
510
+ also: ["OpenMP 6.0 §15.3, p.452"]
511
+
512
+ - id: numteams-clause-001
513
+ check: static
514
+ status: provisional
515
+ predicate: num_teams_positive
516
+ example: "!$omp teams num_teams(0)"
517
+ notes: "Isolation: a lower-bound literal 0 below a positive upper-bound (num_teams(0: 4)); num_teams(0) alone also isolates."
518
+ spec:
519
+ 50:
520
+ citation: "OpenMP 5.0 §2.7, p.85"
521
+ text: "The num_teams expression must evaluate to a positive integer value."
522
+ 52:
523
+ citation: "OpenMP 5.2 §3.2, p.60"
524
+ text: "A positive argument or parameter must be greater than zero; a non-negative argument or parameter must be greater than or equal to zero."
525
+ also: ["OpenMP 5.2 §10.2.1, p.233"]
526
+ 60:
527
+ citation: "OpenMP 6.0 §5.2, p.161"
528
+ text: "An argument or parameter with the positive property must be greater than zero."
529
+ also: ["OpenMP 6.0 §12.2.1, p.397"]
530
+
531
+ - id: numteams-clause-002
532
+ check: static
533
+ status: provisional
534
+ predicate: num_teams_bounds_ordered
535
+ example: "!$omp teams num_teams(8: 4)"
536
+ notes: "Isolation: num_teams(8: 4) with both literals positive."
537
+ spec:
538
+ 52:
539
+ citation: "OpenMP 5.2 §10.2.1, p.233"
540
+ text: "lower-bound must be less than or equal to upper-bound."
541
+ 60:
542
+ citation: "OpenMP 6.0 §12.2.1, p.397"
543
+ text: "lower-bound must be less than or equal to upper-bound."
544
+
545
+ - id: distschedule-clause-001
546
+ check: static
547
+ status: provisional
548
+ predicate: dist_schedule_chunk_positive
549
+ example: "!$omp distribute dist_schedule(static, 0)"
550
+ notes: "Isolation: dist_schedule(static, 0) on a distribute that is orphaned or in teams."
551
+ spec:
552
+ 50:
553
+ citation: "OpenMP 5.0 §2.9.2, p.107"
554
+ text: "chunk_size must be a loop invariant integer expression with a positive value."
555
+ also: ["OpenMP 5.0 §2.9.4.1, p.122"]
556
+ 52:
557
+ citation: "OpenMP 5.2 §3.2, p.60"
558
+ text: "A positive argument or parameter must be greater than zero; a non-negative argument or parameter must be greater than or equal to zero."
559
+ also: ["OpenMP 5.2 §11.6.1, p.256"]
560
+ 60:
561
+ citation: "OpenMP 6.0 §5.2, p.161"
562
+ text: "An argument or parameter with the positive property must be greater than zero."
563
+ also: ["OpenMP 6.0 §13.7.1, p.422"]
564
+
565
+ - id: reduction-clause-001
566
+ check: static
567
+ status: provisional
568
+ predicate: reduction_task_placement
569
+ example: "!$omp teams reduction(task, +: v)"
570
+ notes: "Isolation: reduction(task, +: x) on teams (no parallel/worksharing leaf), without nowait."
571
+ spec:
572
+ 50:
573
+ citation: "OpenMP 5.0 §2.19.5.4, p.302"
574
+ text: "A reduction clause with the task reduction-modifier may only appear on a parallel construct, a worksharing construct or a combined or composite construct for which any of the aforementioned constructs is a constituent construct and simd or loop are not constituent constructs."
575
+ 52:
576
+ citation: "OpenMP 5.2 §5.5.8, p.135"
577
+ text: "A reduction clause with the task reduction-modifier may only appear on a parallel construct, a worksharing construct or a combined or composite construct for which any of the aforementioned constructs is a constituent construct and neither simd nor loop are constituent constructs."
578
+ 60:
579
+ citation: "OpenMP 6.0 §7.6.10, p.254"
580
+ text: "A reduction clause with the task reduction-modifier may only appear on a parallel construct or a worksharing construct, or a compound construct for which any of the aforementioned constructs is a constituent construct and neither simd nor loop are constituent constructs."
581
+
582
+ - id: reduction-clause-002
583
+ check: static
584
+ status: provisional
585
+ predicate: reduction_inscan_placement
586
+ example: "!$omp distribute parallel do reduction(inscan, +: x)"
587
+ notes: "Isolation: reduction(inscan, +: x) on distribute parallel do, without other reductions, ordered or schedule."
588
+ spec:
589
+ 50:
590
+ citation: "OpenMP 5.0 §2.19.5.4, p.302"
591
+ text: "A reduction clause with the inscan reduction-modifier may only appear on a worksharing-loop construct, a worksharing-loop SIMD construct, a simd construct, a parallel worksharing-loop construct or a parallel worksharing-loop SIMD construct."
592
+ 52:
593
+ citation: "OpenMP 5.2 §5.5.8, p.136"
594
+ text: "A reduction clause with the inscan reduction-modifier may only appear on a worksharing-loop construct, a simd construct or a combined or composite construct for which any of the aforementioned constructs is a constituent construct and distribute is not a constituent construct."
595
+ 60:
596
+ citation: "OpenMP 6.0 §7.6.10, p.254"
597
+ text: "A reduction clause with the inscan reduction-modifier may only appear on a worksharing-loop construct or a simd construct, or a compound construct for which any of the aforementioned constructs is a constituent construct and neither distribute nor taskloop is a constituent construct."
598
+
599
+ - id: reduction-clause-003
600
+ check: static
601
+ status: provisional
602
+ predicate: reduction_inscan_not_mixed
603
+ example: "!$omp parallel do reduction(inscan, +: x) reduction(+: y)"
604
+ notes: "Isolation: an inscan reduction plus a plain reduction of another item on parallel do."
605
+ spec:
606
+ 50:
607
+ citation: "OpenMP 5.0 §2.19.5.4, p.302"
608
+ text: "A reduction clause without the inscan reduction-modifier may not appear on a construct on which a reduction clause with the inscan reduction-modifier appears."
609
+ 52:
610
+ citation: "OpenMP 5.2 §5.5.8, p.135"
611
+ text: "If the inscan reduction-modifier is specified, a reduction clause without the inscan reduction-modifier must not appear on the same construct."
612
+ 60:
613
+ citation: "OpenMP 6.0 §7.6.10, p.254"
614
+ text: "If the inscan reduction-modifier is specified, a reduction clause without the inscan reduction-modifier must not appear on the same construct."
615
+
616
+ - id: reduction-clause-004
617
+ check: static
618
+ status: provisional
619
+ predicate: reduction_inscan_no_ordered_schedule
620
+ example: "!$omp parallel do reduction(inscan, +: x) schedule(static)"
621
+ notes: "Isolation: schedule(static) added to parallel do reduction(inscan, ...)."
622
+ spec:
623
+ 50:
624
+ citation: "OpenMP 5.0 §2.9.2, p.107"
625
+ text: "If a reduction clause with the inscan modifier is specified, neither the ordered nor schedule clause may appear on the worksharing-loop directive."
626
+ 52:
627
+ citation: "OpenMP 5.2 §5.5.8, p.136"
628
+ text: "The inscan reduction-modifier must not be specified on a construct for which the ordered or schedule clause is specified."
629
+ 60:
630
+ citation: "OpenMP 6.0 §7.6.10, p.254"
631
+ text: "The inscan reduction-modifier must not be specified on a construct for which the ordered or schedule clause is specified."
632
+
633
+ - id: reduction-clause-005
634
+ check: static
635
+ status: provisional
636
+ predicate: reduction_task_no_nowait
637
+ example: "!$omp do reduction(task, +: x) / do ... / end do / !$omp end do nowait"
638
+ notes: "Isolation: nowait on the end do of do reduction(task, ...) (orphaned do)."
639
+ spec:
640
+ 50:
641
+ citation: "OpenMP 5.0 §2.19.5.4, p.302"
642
+ text: "The task reduction-modifier may not appear in a reduction clause if the nowait clause is specified on the same construct."
643
+ 52:
644
+ citation: "OpenMP 5.2 §5.5.8, p.136"
645
+ text: "The task reduction-modifier must not appear in a reduction clause if the nowait clause is specified on the same construct."
646
+ 60:
647
+ citation: "OpenMP 6.0 §7.6.10, p.254"
648
+ text: "The task reduction-modifier must not appear in a reduction clause if the nowait clause is specified on the same construct."
649
+
650
+ - id: distribute-dsa-001
651
+ check: static
652
+ status: provisional
653
+ predicate: distribute_firstprivate_lastprivate
654
+ example: "!$omp teams distribute firstprivate(a, b) lastprivate(b)"
655
+ notes: "Isolation: the same item in firstprivate and lastprivate on distribute or on any compound with a distribute leaf (teams distribute, distribute parallel do, target teams distribute ...): both clauses land on the distribute leaf, so the rule applies there. On a compound without a distribute leaf (e.g. parallel do) firstprivate plus lastprivate on one item is legal."
656
+ spec:
657
+ 50:
658
+ citation: "OpenMP 5.0 §2.9.4.1, p.123"
659
+ text: "A list item may appear in a firstprivate or lastprivate clause but not both."
660
+ 52:
661
+ citation: "OpenMP 5.2 §11.6, p.255"
662
+ text: "A list item may appear in a firstprivate or lastprivate clause, but not in both."
663
+ 60:
664
+ citation: "OpenMP 6.0 §13.7, p.421"
665
+ text: "A list item may appear in a firstprivate or lastprivate clause, but not in both."
666
+
667
+ - id: distribute-clause-001
668
+ check: static
669
+ status: provisional
670
+ predicate: distribute_no_conditional_lastprivate
671
+ example: "!$omp distribute lastprivate(conditional: x)"
672
+ notes: "Isolation: lastprivate(conditional: x) on distribute (orphaned or in teams)."
673
+ spec:
674
+ 50:
675
+ citation: "OpenMP 5.0 §2.9.4.3, p.126"
676
+ text: "The conditional modifier may not appear in a lastprivate clause."
677
+ also: ["OpenMP 5.0 §2.9.4.1, p.121", "OpenMP 5.0 §2.9.4.2, p.124", "OpenMP 5.0 §2.9.4.4, p.127"]
678
+ 52:
679
+ citation: "OpenMP 5.2 §11.6, p.255"
680
+ text: "The conditional lastprivate-modifier must not be specified."
681
+ 60:
682
+ citation: "OpenMP 6.0 §13.7, p.421"
683
+ text: "The conditional lastprivate-modifier must not be specified."
684
+
685
+ - id: datasharing-dsa-001
686
+ check: static
687
+ status: provisional
688
+ predicate: dsa_list_item_once
689
+ example: "!$omp parallel do reduction(+: j) reduction(*: k) private(k)"
690
+ notes: "Checked after the 5.2 §17.2 / 6.0 §19.2 split (rules._dsa_split); implicit clauses created by the split are not counted, and linear only on its innermost leaf. Isolation: two clauses that land on the same leaf, e.g. private(x) firstprivate(x) on parallel do (both on do) or shared(x) private(x) on parallel; shared(x) firstprivate(x) on parallel do is legal."
691
+ spec:
692
+ 50:
693
+ citation: "OpenMP 5.0 §2.14, p.219"
694
+ text: "The restriction that a list item may not appear in more than one data sharing clause with the exception of specifying a variable in both firstprivate and lastprivate clauses applies after the clauses are split or duplicated per the above rules."
695
+ 52:
696
+ citation: "OpenMP 5.2 §17.2, p.341"
697
+ text: "The restriction that a list item may not appear in more than one data sharing clause with the exception of specifying a variable in both firstprivate and lastprivate clauses applies after the clauses are split or duplicated per the above rules."
698
+ also: ["OpenMP 5.2 §5.4, p.108"]
699
+ 60:
700
+ citation: "OpenMP 6.0 §19.2, p.530"
701
+ text: "The restriction that a list item may not appear in more than one data-sharing attribute clause with the exception of specifying a variable in both firstprivate and lastprivate clauses applies after the clauses are split or duplicated per the above rules."
702
+ also: ["OpenMP 6.0 §7.5, p.222"]
703
+
704
+ - id: default-dsa-001
705
+ check: static
706
+ status: provisional
707
+ predicate: default_none_listed
708
+ example: "!$omp parallel do default(none) shared(a) / do i = 1, n / b(i) = a(i) / end do"
709
+ notes: "The legality oracle of omp.clause.default.none. Checked on base-language statements in the construct (lexical extent) only: a variable declared in the source and visible from the directive (not a named constant, not a name a USE may supply) that no data-sharing attribute clause on the directive lists; DO variables of loops in the construct are predetermined private. Lenient: references inside nested directives' clauses are not counted. Isolation: drop one variable from the shared list of a default(none) construct whose body references it."
710
+ spec:
711
+ 50:
712
+ citation: "OpenMP 5.0 §2.19.4.1, p.283"
713
+ text: "The default(none) clause requires that each variable that is referenced in the construct, and that does not have a predetermined data-sharing attribute, must have its data-sharing attribute explicitly determined by being listed in a data-sharing attribute clause."
714
+ 52:
715
+ citation: "OpenMP 5.2 §5.4.1, p.109"
716
+ text: "If data-sharing-attribute is none, each variable that is referenced in the construct and does not have a predetermined data-sharing attribute must have its data-sharing attribute explicitly determined by being listed in a data-sharing attribute clause."
717
+ 60:
718
+ citation: "OpenMP 6.0 §7.5.1, p.224"
719
+ text: "If data-sharing-attribute is none, each variable that is referenced in the construct and does not have a predetermined data-sharing attribute must have an explicitly determined data-sharing attribute."
720
+
721
+ - id: listitem-clause-001
722
+ check: static
723
+ status: provisional
724
+ predicate: list_item_not_part_of_variable
725
+ example: "!$omp declare target to(arr(1:2)) or !$omp parallel private(a(1))"
726
+ notes: "Isolation: private(a(1)) on parallel, or declare target to/enter(arr(1:2))."
727
+ spec:
728
+ 50:
729
+ citation: "OpenMP 5.0 §2.19.3, p.281"
730
+ text: "A variable that is part of another variable (as an array or structure element) cannot be privatized."
731
+ also: ["OpenMP 5.0 §2.19.4.2, p.285", "OpenMP 5.0 §2.19.5.1, p.298", "OpenMP 5.0 §2.12.7, p.184", "OpenMP 5.0 §2.19.2, p.278"]
732
+ 52:
733
+ citation: "OpenMP 5.2 §3.2.1, p.62"
734
+ text: "Unless otherwise specified, a variable that is part of another variable (as an array element or a structure element) cannot be a variable list item, an extended list item or locator list item."
735
+ 60:
736
+ citation: "OpenMP 6.0 §5.2.1, p.164"
737
+ text: "Unless otherwise specified, a variable that is part of an aggregate variable must not be a variable list item or an extended list item."
738
+
739
+ - id: device-clause-001
740
+ check: static
741
+ status: provisional
742
+ predicate: device_ancestor_only_on_target
743
+ example: "!$omp target data device(ancestor: 1) map(a)"
744
+ notes: "Isolation: device(ancestor: 1) on target data, with requires reverse_offload in the program unit."
745
+ spec:
746
+ 52:
747
+ citation: "OpenMP 5.2 §13.2, p.276"
748
+ text: "The ancestor device-modifier must not appear on the device clause on any directive other than the target construct."
749
+ 60:
750
+ citation: "OpenMP 6.0 §15.2, p.452"
751
+ text: "The ancestor device-modifier must not appear on the device clause on any directive other than the target construct."
752
+
753
+ - id: device-clause-002
754
+ check: static
755
+ status: provisional
756
+ predicate: device_ancestor_is_one
757
+ example: "!$omp target device(ancestor: 2) map(a)"
758
+ notes: "Isolation: device(ancestor: 2) on target with requires reverse_offload in the source (without it device-clause-003 also fires)."
759
+ spec:
760
+ 50:
761
+ citation: "OpenMP 5.0 §2.12.5, p.174"
762
+ text: "If a device clause in which the ancestor device-modifier appears is present on the construct, then the following restrictions apply: – A requires directive with the reverse_offload clause must be specified; – The device clause expression must evaluate to 1; – Only the device, firstprivate, private, defaultmap, and map clauses may appear on the construct; – No OpenMP constructs or calls to OpenMP API runtime routines are allowed inside the corresponding target region."
763
+ 52:
764
+ citation: "OpenMP 5.2 §13.2, p.276"
765
+ text: "If the ancestor device-modifier is specified, the device-description must evaluate to 1 and a requires directive with the reverse_offload clause must be specified;"
766
+ 60:
767
+ citation: "OpenMP 6.0 §15.2, p.452"
768
+ text: "If the ancestor device-modifier is specified, the device-description must evaluate to 1 and a requires directive with the reverse_offload clause must be specified;"
769
+
770
+ - id: device-clause-003
771
+ check: static
772
+ status: provisional
773
+ predicate: device_ancestor_needs_reverse_offload
774
+ example: "!$omp target device(ancestor: 1) map(a) (no !$omp requires reverse_offload in the source)"
775
+ notes: "Isolation: device(ancestor: 1) on target, no requires reverse_offload anywhere in the source."
776
+ spec:
777
+ 50:
778
+ citation: "OpenMP 5.0 §2.12.5, p.174"
779
+ text: "If a device clause in which the ancestor device-modifier appears is present on the construct, then the following restrictions apply: – A requires directive with the reverse_offload clause must be specified; – The device clause expression must evaluate to 1; – Only the device, firstprivate, private, defaultmap, and map clauses may appear on the construct; – No OpenMP constructs or calls to OpenMP API runtime routines are allowed inside the corresponding target region."
780
+ 52:
781
+ citation: "OpenMP 5.2 §13.2, p.276"
782
+ text: "If the ancestor device-modifier is specified, the device-description must evaluate to 1 and a requires directive with the reverse_offload clause must be specified;"
783
+ 60:
784
+ citation: "OpenMP 6.0 §15.2, p.452"
785
+ text: "If the ancestor device-modifier is specified, the device-description must evaluate to 1 and a requires directive with the reverse_offload clause must be specified;"
786
+
787
+ - id: target-clause-001
788
+ check: static
789
+ status: provisional
790
+ predicate: target_ancestor_limits
791
+ example: "!$omp target device(ancestor: 1) map(a) if(x)"
792
+ notes: "Isolation: one extra clause (if(x)) on target device(ancestor: 1), with requires reverse_offload."
793
+ spec:
794
+ 50:
795
+ citation: "OpenMP 5.0 §2.12.5, p.174"
796
+ text: "If a device clause in which the ancestor device-modifier appears is present on the construct, then the following restrictions apply: – A requires directive with the reverse_offload clause must be specified; – The device clause expression must evaluate to 1; – Only the device, firstprivate, private, defaultmap, and map clauses may appear on the construct; – No OpenMP constructs or calls to OpenMP API runtime routines are allowed inside the corresponding target region."
797
+ 52:
798
+ citation: "OpenMP 5.2 §13.8, p.286"
799
+ text: "If a device clause is specified with the ancestor device-modifier, only the device, firstprivate, private, defaultmap, and map clauses may appear on the construct and no OpenMP constructs or calls to OpenMP API runtime routines are allowed inside the corresponding target region."
800
+ 60:
801
+ citation: "OpenMP 6.0 §15.8, p.463"
802
+ text: "If a device clause is specified with the ancestor device-modifier, only the device, firstprivate, private, defaultmap, nowait, and map clauses may appear on the construct and no constructs or calls to routines are allowed inside the corresponding target region."
803
+
804
+ - id: declaretarget-clause-001
805
+ check: static
806
+ status: provisional
807
+ predicate: declare_target_extended_list_alone
808
+ example: "!$omp declare target (a) enter(b)"
809
+ notes: "Isolation: declare target (a) enter(b). At 5.2, declare target (a) device_type(host) also fires declaretarget-clause-002."
810
+ spec:
811
+ 52:
812
+ citation: "OpenMP 5.2 §7.8.1, p.206"
813
+ text: "If the extended-list argument is specified, no clauses may be specified."
814
+ 60:
815
+ citation: "OpenMP 6.0 §9.9.1, p.347"
816
+ text: "If the extended-list argument is specified, no clauses may be specified."
817
+
818
+ - id: declaretarget-clause-002
819
+ check: static
820
+ status: provisional
821
+ predicate: declare_target_enter_or_link
822
+ example: "!$omp declare target device_type(host)"
823
+ notes: "Isolation (5.2): declare target device_type(host) without an extended list."
824
+ spec:
825
+ 52:
826
+ citation: "OpenMP 5.2 §7.8.1, p.206"
827
+ text: "If the directive has a clause, it must contain at least one enter clause or at least one link clause."
828
+
829
+ - id: declaretarget-clause-003
830
+ check: static
831
+ status: provisional
832
+ predicate: declare_target_nohost_link
833
+ example: "!$omp declare target link(a) device_type(nohost)"
834
+ notes: "Isolation: declare target link(a) device_type(nohost)."
835
+ spec:
836
+ 52:
837
+ citation: "OpenMP 5.2 §7.8.1, p.206"
838
+ text: "A variable for which nohost is specified may not appear in a link clause."
839
+ 60:
840
+ citation: "OpenMP 6.0 §9.9.1, p.347"
841
+ text: "A variable for which nohost is specified must not appear in a link clause."
842
+
843
+ - id: requires-clause-001
844
+ check: static
845
+ status: provisional
846
+ predicate: requires_same_memory_order
847
+ example: "!$omp requires atomic_default_mem_order(seq_cst) / !$omp requires atomic_default_mem_order(relaxed)"
848
+ notes: "Isolation: two requires atomic_default_mem_order with different arguments in one program unit, not nested. The 6.0 entry cites the same sentence (6.0 §10.5.1.1)."
849
+ spec:
850
+ 50:
851
+ citation: "OpenMP 5.0 §2.4, p.63"
852
+ text: "At most one requires directive with atomic_default_mem_order clause can appear in a single compilation unit."
853
+ 52:
854
+ citation: "OpenMP 5.2 §8.2, p.211"
855
+ text: "All requires directives in the same compilation unit that specify the atomic_default_mem_order requirement must specify the same argument."
856
+ 60:
857
+ citation: "OpenMP 6.0 §10.5.1.1, p.357"
858
+ text: "All requires directives in the same compilation unit that specify the atomic_default_mem_order requirement must specify the same argument."
859
+
860
+ # --- The remaining static restrictions ---
861
+
862
+ - id: worksharing-nesting-001
863
+ check: static
864
+ status: provisional
865
+ predicate: worksharing_closely_nested
866
+ example: "!$omp parallel / !$omp single / !$omp do / do ... / !$omp end single / !$omp end parallel"
867
+ notes: "5.2 states the static rule. 6.0 states it only in the informative Appendix C ('A team-executed region may not be closely nested inside a partitioned worksharing region, a region that corresponds to a thread-exclusive construct, or a region that corresponds to a task-generating construct that is not a team-generating construct'), as a consequence of the cited 6.0 §13 rule: the inner region is encountered by only some threads of its binding team, so the rule is certain whenever the team has more than one thread; a one-thread team is not excepted (owner point). Isolation: a do construct directly inside a single (or task) construct inside a parallel construct."
868
+ spec:
869
+ 50:
870
+ citation: "OpenMP 5.0 §2.20, p.328"
871
+ text: "A worksharing region may not be closely nested inside a worksharing, loop, task, taskloop, critical, ordered, atomic, or master region."
872
+ 52:
873
+ citation: "OpenMP 5.2 §17.1, p.338"
874
+ text: "A worksharing region may not be closely nested inside a worksharing, task, taskloop, critical, ordered, atomic, or masked region."
875
+ 60:
876
+ citation: "OpenMP 6.0 §13, p.404"
877
+ text: "Each work-distribution region must be encountered by all threads in the binding thread set or by none at all unless cancellation has been requested for the innermost enclosing parallel region."
878
+
879
+ - id: simd-nesting-001
880
+ check: static
881
+ status: provisional
882
+ predicate: simd_simdizable_only
883
+ example: "!$omp simd / do ... / !$omp parallel / ... / !$omp end parallel / end do"
884
+ notes: "SIMDizable: simd, atomic, loop without bind(teams/parallel) (its binding region is then not defined, 6.0 §13.8 p.423), ordered with the simd clause; 6.0 also the loop-transforming constructs. Separating and declarative directives (scan) are not constructs. Isolation: a parallel (or task) construct in the loop body of a simd construct."
885
+ spec:
886
+ 50:
887
+ citation: "OpenMP 5.0 §2.9.3.1, p.113"
888
+ text: "The only OpenMP constructs that can be encountered during execution of a simd region are the atomic construct, the loop construct, the simd construct and the ordered construct with the simd clause."
889
+ 52:
890
+ citation: "OpenMP 5.2 §10.4, p.235"
891
+ text: "Only simdizable constructs can be encountered during execution of a simd region."
892
+ also: ["OpenMP 5.2 §17.1, p.338"]
893
+ 60:
894
+ citation: "OpenMP 6.0 §12.4, p.399"
895
+ text: "Only SIMDizable constructs may be encountered during execution of a simd region."
896
+
897
+ - id: order-nesting-002
898
+ check: static
899
+ status: provisional
900
+ predicate: order_concurrent_no_api_calls
901
+ example: "!$omp parallel do order(concurrent) / do ... / x = omp_get_thread_num() / end do"
902
+ notes: "A loop construct without an order clause counts as order(concurrent) (5.2 §11.7, 6.0 §13.8). 6.0: no runtime routine has the order-concurrent-nestable property. Isolation: a call omp_get_thread_num() in the body of parallel do order(concurrent)."
903
+ spec:
904
+ 50:
905
+ citation: "OpenMP 5.0 §2.9.5, p.131"
906
+ text: "A loop region corresponding to a loop construct may not contain calls to the OpenMP Runtime API."
907
+ also: ["OpenMP 5.0 §2.9.2, p.108", "OpenMP 5.0 §2.9.3.1, p.113"]
908
+ 52:
909
+ citation: "OpenMP 5.2 §10.3, p.234"
910
+ text: "A region that corresponds to a construct with an order clause that specifies concurrent may not contain OpenMP runtime API calls."
911
+ also: ["OpenMP 5.2 §17.1, p.339"]
912
+ 60:
913
+ citation: "OpenMP 6.0 §12.3, p.398"
914
+ text: "The only routines for which a call may be nested inside a region that corresponds to a construct on which the order clause is specified with concurrent as the ordering argument are order-concurrent-nestable routines."
915
+
916
+ - id: ordered-nesting-001
917
+ check: static
918
+ status: provisional
919
+ predicate: ordered_threads_in_worksharing_loop
920
+ example: "!$omp parallel / !$omp ordered / ... / !$omp end ordered / !$omp end parallel"
921
+ notes: "Block-associated ordered without the simd clause (no clause acts as threads, 5.2 §15.10.2 p.330, 6.0 §17.10.2 p.515). An orphaned ordered construct is not flagged. Isolation: ordered threads directly in a parallel construct."
922
+ spec:
923
+ 50:
924
+ citation: "OpenMP 5.0 §2.20, p.328"
925
+ text: "An ordered region corresponding to an ordered construct without the simd clause specified must be closely nested inside a worksharing-loop region."
926
+ 52:
927
+ citation: "OpenMP 5.2 §17.1, p.338"
928
+ text: "An ordered region that corresponds to an ordered construct without the simd clause specified must be closely nested inside a worksharing-loop region."
929
+ 60:
930
+ citation: "OpenMP 6.0 §17.10.2, p.516"
931
+ text: "If the threads parallelization-level clause is specified, the binding region must correspond to a construct for which a worksharing-loop construct is a leaf construct."
932
+
933
+ - id: ordered-nesting-002
934
+ check: static
935
+ status: provisional
936
+ predicate: ordered_simd_in_simd
937
+ example: "!$omp parallel do ordered / do ... / !$omp ordered simd / ... / !$omp end ordered / end do"
938
+ notes: "Isolation: ordered simd directly in a parallel do (no simd leaf)."
939
+ spec:
940
+ 50:
941
+ citation: "OpenMP 5.0 §2.20, p.328"
942
+ text: "An ordered region corresponding to an ordered construct with the simd clause specified must be closely nested inside a simd or worksharing-loop SIMD region."
943
+ 52:
944
+ citation: "OpenMP 5.2 §17.1, p.338"
945
+ text: "An ordered region that corresponds to an ordered construct with the simd clause specified must be closely nested inside a simd or worksharing-loop SIMD region."
946
+ 60:
947
+ citation: "OpenMP 6.0 §17.10.2, p.516"
948
+ text: "If the simd parallelization-level clause is specified, the binding region must correspond to a construct for which the simd construct is a leaf construct."
949
+
950
+ - id: ordered-clause-001
951
+ check: static
952
+ status: provisional
953
+ predicate: ordered_binding_has_ordered_clause
954
+ example: "!$omp parallel do / do ... / !$omp ordered / ... / !$omp end ordered / end do"
955
+ notes: "The construct with the do leaf that the ordered construct binds to needs an ordered clause (5.2: ordered or ordered(1); 6.0: n equal to the collapse value). Isolation: drop the ordered clause of the parallel do."
956
+ spec:
957
+ 50:
958
+ citation: "OpenMP 5.0 §2.9.2, p.107"
959
+ text: "The ordered clause must be present on the worksharing-loop construct if any ordered region ever binds to a worksharing-loop region arising from the worksharing-loop construct."
960
+ 52:
961
+ citation: "OpenMP 5.2 §15.10.2, p.331"
962
+ text: "An ordered clause with a parameter value equal to one must appear on the construct that corresponds to the binding region."
963
+ 60:
964
+ citation: "OpenMP 6.0 §17.10.2, p.516"
965
+ text: "An ordered clause with an argument value equal to the number of collapsed loops must appear on the construct that corresponds to the binding region, if the binding region is not a simd region."
966
+
967
+ - id: workdistribute-nesting-001
968
+ lang: f90
969
+ check: static
970
+ status: provisional
971
+ predicate: workdistribute_in_teams
972
+ example: "!$omp target / !$omp workdistribute / b = a / !$omp end workdistribute / !$omp end target"
973
+ notes: "6.0 only. Isolation: workdistribute directly in a target (not teams)."
974
+ spec:
975
+ 60:
976
+ citation: "OpenMP 6.0 §13.5, p.413"
977
+ text: "The workdistribute construct must be a closely nested construct inside a teams construct."
978
+
979
+ - id: workdistribute-nesting-002
980
+ lang: f90
981
+ check: static
982
+ status: provisional
983
+ predicate: workdistribute_no_nested_region
984
+ example: "!$omp teams workdistribute / !$omp parallel / ... / !$omp end parallel / !$omp end teams workdistribute"
985
+ notes: "6.0 only. Every construct counts as an explicit region here. Isolation: a parallel construct in a teams workdistribute body."
986
+ spec:
987
+ 60:
988
+ citation: "OpenMP 6.0 §13.5, p.413"
989
+ text: "No explicit region may be nested inside a workdistribute region."
990
+
991
+ - id: workdistribute-body-001
992
+ lang: f90
993
+ check: static
994
+ status: provisional
995
+ predicate: workdistribute_statements
996
+ example: "!$omp teams workdistribute / print *, a / !$omp end teams workdistribute"
997
+ notes: "6.0 only. Checks the statement kind (assignment or CALL); whether an assignment is intrinsic or a called procedure is pure and elemental is not checked. Isolation: an IF or PRINT statement in a workdistribute body."
998
+ spec:
999
+ 60:
1000
+ citation: "OpenMP 6.0 §13.5, p.413"
1001
+ text: "Base language statements that are encountered inside a workdistribute must consist of only the following: – array assignments; – scalar assignments; and – calls to pure and elemental procedures."
1002
+
1003
+ - id: distribute-clause-002
1004
+ check: static
1005
+ status: provisional
1006
+ predicate: distribute_linear_loop_vars
1007
+ example: "!$omp distribute simd linear(x) / do i = 1, n ..."
1008
+ notes: "On every compound with a distribute leaf and another leaf (the restrictions of each directive-name-B apply recursively, 5.2 §17.4). The ordered part of the 6.0 sentence is enforced by the grammar (ordered is not allowed on compounds with distribute). Isolation: linear(x) of a non-loop variable on distribute simd."
1009
+ spec:
1010
+ 50:
1011
+ citation: "OpenMP 5.0 §2.9.4.2, p.124"
1012
+ text: "A list item may not appear in a linear clause unless it is the loop iteration variable of a loop that is associated with the construct."
1013
+ also: ["OpenMP 5.0 §2.9.4.4, p.127", "OpenMP 5.0 §2.9.4.3, p.126"]
1014
+ 52:
1015
+ citation: "OpenMP 5.2 §17.5, p.344"
1016
+ text: "If directive-name-A is distribute, the linear clause may only be specified for loop iteration variables of loops that are associated with the construct."
1017
+ 60:
1018
+ citation: "OpenMP 6.0 §19.3, p.531"
1019
+ text: "If distribute is a constituent-directive name, the linear clause may only be specified for loop-iteration variables of loops that are associated with the construct and the ordered clause must not be specified."
1020
+
1021
+ - id: schedule-clause-001
1022
+ check: static
1023
+ status: provisional
1024
+ predicate: schedule_runtime_auto_no_chunk
1025
+ example: "!$omp do schedule(runtime, 4)"
1026
+ notes: "Isolation: schedule(auto, 4)."
1027
+ spec:
1028
+ 50:
1029
+ citation: "OpenMP 5.0 §2.9.2, p.107"
1030
+ text: "When schedule(runtime) or schedule(auto) is specified, chunk_size must not be specified."
1031
+ 52:
1032
+ citation: "OpenMP 5.2 §11.5.3, p.254"
1033
+ text: "If runtime or auto is specified for kind, chunk_size must not be specified."
1034
+ 60:
1035
+ citation: "OpenMP 6.0 §13.6.3, p.420"
1036
+ text: "If runtime or auto is specified for kind, chunk_size must not be specified."
1037
+
1038
+ - id: schedule-clause-002
1039
+ check: static
1040
+ status: provisional
1041
+ predicate: schedule_nonmonotonic_no_ordered
1042
+ example: "!$omp do schedule(nonmonotonic: dynamic) ordered"
1043
+ notes: "Isolation: add ordered to do schedule(nonmonotonic: dynamic)."
1044
+ spec:
1045
+ 50:
1046
+ citation: "OpenMP 5.0 §2.9.2, p.107"
1047
+ text: "The nonmonotonic modifier cannot be specified if an ordered clause is specified."
1048
+ 52:
1049
+ citation: "OpenMP 5.2 §11.5.3, p.254"
1050
+ text: "The nonmonotonic ordering-modifier cannot be specified if an ordered clause is specified on the same construct."
1051
+ 60:
1052
+ citation: "OpenMP 6.0 §13.6.3, p.420"
1053
+ text: "The nonmonotonic ordering-modifier cannot be specified if an ordered clause is specified on the same construct."
1054
+
1055
+ - id: simd-clause-001
1056
+ check: static
1057
+ status: provisional
1058
+ predicate: simdlen_le_safelen
1059
+ example: "!$omp simd simdlen(8) safelen(4)"
1060
+ notes: "Integer literals only."
1061
+ spec:
1062
+ 50:
1063
+ citation: "OpenMP 5.0 §2.9.3.1, p.113"
1064
+ text: "If both simdlen and safelen clauses are specified, the value of the simdlen parameter must be less than or equal to the value of the safelen parameter."
1065
+ 52:
1066
+ citation: "OpenMP 5.2 §10.4, p.235"
1067
+ text: "If both simdlen and safelen clauses are specified, the value of the simdlen length must be less than or equal to the value of the safelen length."
1068
+ 60:
1069
+ citation: "OpenMP 6.0 §12.4, p.399"
1070
+ text: "If both simdlen and safelen clauses are specified, the value of the simdlen length must be less than or equal to the value of the safelen length."
1071
+
1072
+ - id: simd-clause-002
1073
+ check: static
1074
+ status: provisional
1075
+ predicate: simd_order_concurrent_no_safelen
1076
+ example: "!$omp simd order(concurrent) safelen(4)"
1077
+ notes: "Any directive with a simd leaf (safelen goes to the simd leaf, order to every leaf that takes it)."
1078
+ spec:
1079
+ 52:
1080
+ citation: "OpenMP 5.2 §10.4, p.235"
1081
+ text: "If an order clause that specifies concurrent appears on a simd directive, the safelen clause may not also appear."
1082
+ 60:
1083
+ citation: "OpenMP 6.0 §12.4, p.399"
1084
+ text: "If an order clause that specifies concurrent appears on a simd directive, the safelen clause must not also appear."
1085
+
1086
+ - id: positive-clause-001
1087
+ check: static
1088
+ status: provisional
1089
+ predicate: positive_arguments
1090
+ example: "!$omp parallel num_threads(0)"
1091
+ notes: "The positive arguments of the slice clauses without their own rule: num_threads, safelen, simdlen, schedule chunk_size, the ordered parameter, the aligned alignment (property tables of 5.2 §10.1.2, §10.4.2, §10.4.3, §11.5.3, §4.4.4, §5.11; 6.0 §12.1.2, §12.4.2, §12.4.3, §13.6.3, §6.4.6, §7.12). Integer literals only."
1092
+ spec:
1093
+ 50:
1094
+ citation: "OpenMP 5.0 §2.6, p.77"
1095
+ text: "The num_threads expression must evaluate to a positive integer value."
1096
+ also: ["OpenMP 5.0 §2.9.3.1, p.112", "OpenMP 5.0 §2.9.2, p.104", "OpenMP 5.0 §2.9.2, p.107", "OpenMP 5.0 §2.9.3.1, p.113"]
1097
+ 52:
1098
+ citation: "OpenMP 5.2 §3.2, p.60"
1099
+ text: "A positive argument or parameter must be greater than zero; a non-negative argument or parameter must be greater than or equal to zero."
1100
+ 60:
1101
+ citation: "OpenMP 6.0 §5.2, p.161"
1102
+ text: "An argument or parameter with the positive property must be greater than zero."
1103
+
1104
+ - id: constant-clause-001
1105
+ check: static
1106
+ status: provisional
1107
+ predicate: constant_arguments
1108
+ example: "integer :: k / !$omp simd safelen(k)"
1109
+ notes: "safelen, simdlen and the ordered parameter have the constant property. Flags an argument that is a single name declared in the source as a variable (not a named constant); other expressions are not evaluated."
1110
+ spec:
1111
+ 50:
1112
+ citation: "OpenMP 5.0 §2.9.3.1, p.112"
1113
+ text: "The parameter of the safelen clause must be a constant positive integer expression."
1114
+ also: ["OpenMP 5.0 §2.9.3.1, p.112", "OpenMP 5.0 §2.9.2, p.104"]
1115
+ 52:
1116
+ citation: "OpenMP 5.2 §3.2, p.60"
1117
+ text: "A constant argument or parameter must be a compile-time constant."
1118
+ 60:
1119
+ citation: "OpenMP 6.0 §5.2, p.161"
1120
+ text: "An argument or parameter with the constant property must be a compile-time constant."
1121
+
1122
+ - id: clauseset-clause-001
1123
+ check: static
1124
+ status: provisional
1125
+ predicate: clause_set_required
1126
+ example: "!$omp target update"
1127
+ notes: "Clause sets with the required property that the skeleton grammar does not enforce: target update {to, from}, scan {inclusive, exclusive}, depobj {depend, destroy, update} (6.0 {destroy, init, update}; depend still accepted). Isolation: a target update without a motion clause."
1128
+ spec:
1129
+ 50:
1130
+ citation: "OpenMP 5.0 §2.12.6, p.180"
1131
+ text: "At least one motion-clause must be specified."
1132
+ also: ["OpenMP 5.0 §2.9.6, p.132", "OpenMP 5.0 §2.17.10, p.254"]
1133
+ 52:
1134
+ citation: "OpenMP 5.2 §3.2, p.59"
1135
+ text: "If a clause set has the required property, at least one clause in the set must be present on the directive for which the clause set is specified."
1136
+ also: ["OpenMP 5.2 §13.9, p.289"]
1137
+ 60:
1138
+ citation: "OpenMP 6.0 §5.2, p.161"
1139
+ text: "If a clause set has the required property, at least one clause in the set must be present on the directive for which the clause set is specified."
1140
+ also: ["OpenMP 6.0 §15.9, p.465"]
1141
+
1142
+ - id: clauseset-clause-002
1143
+ check: static
1144
+ status: provisional
1145
+ predicate: clause_set_exclusive
1146
+ example: "!$omp scan inclusive(x) exclusive(y)"
1147
+ notes: "Exclusive clause sets: scan, depobj (5.2), single (6.0), task, taskloop. 5.2 single has its own sentence (single-clause-001)."
1148
+ spec:
1149
+ 50:
1150
+ citation: "OpenMP 5.0 §2.10.1, p.139"
1151
+ text: "If a detach clause appears on the directive, then a mergeable clause cannot appear on the same directive."
1152
+ also: ["OpenMP 5.0 §2.10.2, p.145", "OpenMP 5.0 §2.9.6, p.132", "OpenMP 5.0 §2.17.10, p.254"]
1153
+ 52:
1154
+ citation: "OpenMP 5.2 §3.2, p.59"
1155
+ text: "If one clause of a clause set with the exclusive property appears on a directive, no other clauses with a different clause-name in that set may appear on the directive."
1156
+ 60:
1157
+ citation: "OpenMP 6.0 §5.2, p.161"
1158
+ text: "If one clause of a clause set with the exclusive property appears on a directive, no other clauses with a different clause-name in that clause set may appear on the directive."
1159
+
1160
+ - id: single-clause-001
1161
+ check: static
1162
+ status: provisional
1163
+ predicate: single_copyprivate_nowait
1164
+ example: "!$omp single copyprivate(x) / ... / !$omp end single nowait"
1165
+ notes: "5.2 only (6.0: clauseset-clause-002)."
1166
+ spec:
1167
+ 50:
1168
+ citation: "OpenMP 5.0 §2.8.2, p.91"
1169
+ text: "The copyprivate clause must not be used with the nowait clause."
1170
+ 52:
1171
+ citation: "OpenMP 5.2 §11.1, p.241"
1172
+ text: "The copyprivate clause must not be used with the nowait clause."
1173
+
1174
+ - id: listitem-clause-002
1175
+ check: static
1176
+ status: provisional
1177
+ predicate: list_item_directive_wide_unique
1178
+ example: "!$omp target update to(a) from(a)"
1179
+ notes: "Narrowed to what no other sentence specifies otherwise: an item twice in one clause; twice in clauses of the same name, except data-sharing clauses (datasharing-dsa-001 after the split), map and depend (repeats allowed, 5.2 §5.8.3 / §15.9.5); in both to and from; in two of enter/to/link/local. Isolation: to(a) from(a) on target update."
1180
+ spec:
1181
+ 50:
1182
+ citation: "OpenMP 5.0 §2.19.6, p.310"
1183
+ text: "Clauses may be repeated as needed, but a list item that specifies a given variable may not appear in more than one clause on the same directive."
1184
+ also: ["OpenMP 5.0 §2.9.3.1, p.113", "OpenMP 5.0 §2.12.7, p.183", "OpenMP 5.0 §2.19.4, p.282"]
1185
+ 52:
1186
+ citation: "OpenMP 5.2 §3.2.1, p.61"
1187
+ text: "Unless otherwise specified, OpenMP list items must be directive-wide unique, i.e., a list item can only appear once in one OpenMP list of all arguments, clauses, and modifiers of the directive."
1188
+ 60:
1189
+ citation: "OpenMP 6.0 §5.2.1, p.163"
1190
+ text: "Unless otherwise specified, OpenMP list items other than parameter list items must be directive-wide unique, i.e., a list item can only appear once in one OpenMP list of all arguments, clauses, and modifiers of the directive."
1191
+
1192
+ - id: linear-clause-001
1193
+ check: static
1194
+ status: provisional
1195
+ predicate: linear_inscan_loop_vars
1196
+ example: "!$omp simd reduction(inscan, +: s) linear(x)"
1197
+ notes: "Isolation: linear(x) of a non-loop variable next to reduction(inscan, ...)."
1198
+ spec:
1199
+ 50:
1200
+ citation: "OpenMP 5.0 §2.19.4.6, p.292"
1201
+ text: "Only a loop iteration variable of a loop that is associated with the construct may appear as a list-item in a linear clause if a reduction clause with the inscan modifier also appears on the construct."
1202
+ 52:
1203
+ citation: "OpenMP 5.2 §5.4.6, p.118"
1204
+ text: "Only a loop iteration variable of a loop that is associated with the construct may appear as a list item in a linear clause if a reduction clause with the inscan modifier also appears on the construct."
1205
+ 60:
1206
+ citation: "OpenMP 6.0 §7.5.6, p.233"
1207
+ text: "If a reduction clause with the inscan modifier also appears on the construct, only loop-iteration variables of affected loops may appear as list items in a linear clause."
1208
+
1209
+ - id: linear-clause-002
1210
+ check: static
1211
+ status: provisional
1212
+ predicate: linear_ref_uval_declare_simd
1213
+ example: "!$omp do linear(ref(x))"
1214
+ notes: "Isolation: linear(ref(x)) (5.2) / linear(x: ref) (6.0) on a do construct."
1215
+ spec:
1216
+ 50:
1217
+ citation: "OpenMP 5.0 §2.9.2, p.107"
1218
+ text: "A modifier may not be specified on a linear clause."
1219
+ also: ["OpenMP 5.0 §2.9.3.1, p.113", "OpenMP 5.0 §2.19.4.6, p.293"]
1220
+ 52:
1221
+ citation: "OpenMP 5.2 §5.4.6, p.118"
1222
+ text: "A linear-modifier may be specified as ref or uval only on a declare simd directive."
1223
+ 60:
1224
+ citation: "OpenMP 6.0 §7.5.6, p.233"
1225
+ text: "A linear-modifier may be specified as ref or uval only for linear clauses on declare_simd directives."
1226
+
1227
+ - id: linear-clause-003
1228
+ lang: f90
1229
+ check: static
1230
+ status: provisional
1231
+ predicate: linear_not_pointer
1232
+ example: "real, pointer :: p / !$omp simd linear(p)"
1233
+ notes: "Context requirement: the item's POINTER declaration must be visible in the source."
1234
+ spec:
1235
+ 50:
1236
+ citation: "OpenMP 5.0 §2.19.4.6, p.293"
1237
+ text: "Variables that have the POINTER attribute and Cray pointers may not appear in a linear clause."
1238
+ 52:
1239
+ citation: "OpenMP 5.2 §5.4.6, p.119"
1240
+ text: "List items must not be Cray pointers or variables that have the POINTER attribute. Cray pointer support has been deprecated."
1241
+ 60:
1242
+ citation: "OpenMP 6.0 §7.5.6, p.234"
1243
+ text: "List items must not be variables that have the POINTER attribute."
1244
+
1245
+ - id: linear-clause-004
1246
+ lang: f90
1247
+ check: static
1248
+ status: provisional
1249
+ predicate: linear_integer
1250
+ example: "real :: x / !$omp simd linear(x)"
1251
+ notes: "Context requirement: a visible declaration of the item with another type (intrinsic or derived)."
1252
+ spec:
1253
+ 50:
1254
+ citation: "OpenMP 5.0 §2.19.4.6, p.293"
1255
+ text: "A list-item that appears in a linear clause without the ref modifier must be of type integer."
1256
+ 52:
1257
+ citation: "OpenMP 5.2 §5.4.6, p.119"
1258
+ text: "If linear-modifier is not ref, all list items must be of type integer."
1259
+ 60:
1260
+ citation: "OpenMP 6.0 §7.5.6, p.234"
1261
+ text: "If linear-modifier is not ref, all list items must be of type integer."
1262
+
1263
+ - id: loopvar-dsa-001
1264
+ check: static
1265
+ status: provisional
1266
+ predicate: loop_var_predetermined_dsa
1267
+ example: "!$omp parallel do firstprivate(i) / do i = 1, n ..."
1268
+ notes: "Checked after the clause split, on the loop leaves only (do, simd, distribute, loop, taskloop): an associated loop's iteration variable in a clause other than private or lastprivate (or linear on a simd leaf with one associated loop, 5.2 §5.1.1 / 6.0 §7.1.1 exceptions; the linear-step is not compared). shared(i) on the parallel leaf of parallel do is not flagged (whether the variable is predetermined on that leaf is not read). Isolation: firstprivate(i) or reduction(+: i) on parallel do."
1269
+ spec:
1270
+ 50:
1271
+ citation: "OpenMP 5.0 §2.19.1.1, p.271"
1272
+ text: "Variables with predetermined data-sharing attributes may not be listed in data-sharing attribute clauses, except for the cases listed below."
1273
+ 52:
1274
+ citation: "OpenMP 5.2 §5.1.1, p.98"
1275
+ text: "Variables with predetermined data-sharing attributes may not be listed in data-sharing attribute clauses, except for the cases listed below."
1276
+ 60:
1277
+ citation: "OpenMP 6.0 §7.1.1, p.212"
1278
+ text: "Variables with predetermined data-sharing attributes may not be listed in data-sharing clauses, except for the cases listed below."
1279
+
1280
+ - id: firstprivate-dsa-001
1281
+ check: static
1282
+ status: provisional
1283
+ predicate: firstprivate_private_in_parallel
1284
+ example: "!$omp parallel private(x) / !$omp do firstprivate(x) / ..."
1285
+ notes: "Lexical: the closest enclosing parallel leaf, no other generating leaf (teams, target, task, taskloop) between. private covers private, firstprivate, lastprivate, linear after the split."
1286
+ spec:
1287
+ 50:
1288
+ citation: "OpenMP 5.0 §2.19.4.4, p.287"
1289
+ text: "A list item that is private within a parallel region must not appear in a firstprivate clause on a worksharing construct if any of the worksharing regions arising from the worksharing construct ever bind to any of the parallel regions arising from the parallel construct."
1290
+ 52:
1291
+ citation: "OpenMP 5.2 §5.4.4, p.113"
1292
+ text: "A list item that is private within a parallel region must not appear in a firstprivate clause on a worksharing construct if any of the worksharing regions that arise from the worksharing construct ever bind to any of the parallel regions that arise from the parallel construct."
1293
+ 60:
1294
+ citation: "OpenMP 6.0 §7.5.4, p.228"
1295
+ text: "A list item that is private within a parallel region must not appear in a firstprivate clause on a worksharing construct if any of the worksharing regions that arise from the worksharing construct ever bind to any of the parallel regions that arise from the parallel construct."
1296
+
1297
+ - id: firstprivate-dsa-002
1298
+ check: static
1299
+ status: provisional
1300
+ predicate: firstprivate_private_in_teams
1301
+ example: "!$omp teams private(x) / !$omp distribute firstprivate(x) / ..."
1302
+ notes: "Lexical, as firstprivate-dsa-001."
1303
+ spec:
1304
+ 50:
1305
+ citation: "OpenMP 5.0 §2.19.4.4, p.287"
1306
+ text: "A list item that is private within a teams region must not appear in a firstprivate clause on a distribute construct if any of the distribute regions arising from the distribute construct ever bind to any of the teams regions arising from the teams construct."
1307
+ 52:
1308
+ citation: "OpenMP 5.2 §5.4.4, p.113"
1309
+ text: "A list item that is private within a teams region must not appear in a firstprivate clause on a distribute construct if any of the distribute regions that arise from the distribute construct ever bind to any of the teams regions that arise from the teams construct."
1310
+ 60:
1311
+ citation: "OpenMP 6.0 §7.5.4, p.228"
1312
+ text: "A list item that is private within a teams region must not appear in a firstprivate clause on a distribute construct if any of the distribute regions that arise from the distribute construct ever bind to any of the teams regions that arise from the teams construct."
1313
+
1314
+ - id: firstprivate-dsa-003
1315
+ check: static
1316
+ status: provisional
1317
+ predicate: firstprivate_reduction_in_parallel_ws
1318
+ example: "!$omp parallel reduction(+: x) / !$omp do firstprivate(x) / ..."
1319
+ notes: "5.2 (worksharing, task, taskloop). Lexical."
1320
+ spec:
1321
+ 50:
1322
+ citation: "OpenMP 5.0 §2.19.4.4, p.287"
1323
+ text: "A list item that appears in a reduction clause of a parallel construct must not appear in a firstprivate clause on a worksharing, task, or taskloop construct if any of the worksharing or task regions arising from the worksharing, task, or taskloop construct ever bind to any of the parallel regions arising from the parallel construct."
1324
+ 52:
1325
+ citation: "OpenMP 5.2 §5.4.4, p.113"
1326
+ text: "A list item that appears in a reduction clause of a parallel construct must not appear in a firstprivate clause on a worksharing, task, or taskloop construct if any of the worksharing or task regions that arise from the worksharing, task, or taskloop construct ever bind to any of the parallel regions that arise from the parallel construct."
1327
+
1328
+ - id: firstprivate-dsa-004
1329
+ check: static
1330
+ status: provisional
1331
+ predicate: firstprivate_reduction_in_parallel_task
1332
+ example: "!$omp parallel reduction(+: x) / !$omp task firstprivate(x) / ..."
1333
+ notes: "6.0 (task, taskloop only). Lexical."
1334
+ spec:
1335
+ 60:
1336
+ citation: "OpenMP 6.0 §7.5.4, p.228"
1337
+ text: "A list item that appears in a reduction clause on a parallel construct must not appear in a firstprivate clause on a task or taskloop construct if any of the task regions that arise from the task or taskloop construct ever bind to any of the parallel regions that arise from the parallel construct."
1338
+
1339
+ - id: firstprivate-dsa-005
1340
+ check: static
1341
+ status: provisional
1342
+ predicate: firstprivate_reduction_in_teams
1343
+ example: "!$omp teams reduction(+: x) / !$omp distribute firstprivate(x) / ..."
1344
+ notes: "5.2 only. Lexical."
1345
+ spec:
1346
+ 50:
1347
+ citation: "OpenMP 5.0 §2.19.4.4, p.288"
1348
+ text: "A list item that appears in a reduction clause of a teams construct must not appear in a firstprivate clause on a distribute construct if any of the distribute regions arising from the distribute construct ever bind to any of the teams regions arising from the teams construct."
1349
+ 52:
1350
+ citation: "OpenMP 5.2 §5.4.4, p.113"
1351
+ text: "A list item that appears in a reduction clause of a teams construct must not appear in a firstprivate clause on a distribute construct if any of the distribute regions that arise from the distribute construct ever bind to any of the teams regions that arise from the teams construct."
1352
+
1353
+ - id: lastprivate-dsa-001
1354
+ check: static
1355
+ status: provisional
1356
+ predicate: lastprivate_private_in_binding
1357
+ example: "!$omp parallel private(x) / !$omp do lastprivate(x) / ..."
1358
+ notes: "Lexical: a worksharing or loop leaf binds to the closest parallel leaf, a distribute leaf to the closest teams leaf."
1359
+ spec:
1360
+ 50:
1361
+ citation: "OpenMP 5.0 §2.19.4.5, p.290"
1362
+ text: "A list item that is private within a parallel region, or that appears in the reduction clause of a parallel construct, must not appear in a lastprivate clause on a worksharing construct if any of the corresponding worksharing regions ever binds to any of the corresponding parallel regions."
1363
+ 52:
1364
+ citation: "OpenMP 5.2 §5.4.5, p.116"
1365
+ text: "A list item must not appear in a lastprivate clause on a work-distribution construct if the corresponding region binds to the region of a parallelism-generating construct in which the list item is private."
1366
+ 60:
1367
+ citation: "OpenMP 6.0 §7.5.5, p.231"
1368
+ text: "A list item must not appear in a lastprivate clause on a work-distribution construct if the corresponding region binds to the region of a parallelism-generating construct in which the list item is private."
1369
+
1370
+ - id: lastprivate-clause-001
1371
+ check: static
1372
+ status: provisional
1373
+ predicate: lastprivate_conditional_scalar
1374
+ example: "real :: a(10) / !$omp do lastprivate(conditional: a)"
1375
+ notes: "Context requirement: the array declaration must be visible."
1376
+ spec:
1377
+ 50:
1378
+ citation: "OpenMP 5.0 §2.19.4.5, p.290"
1379
+ text: "A list item that appears in a lastprivate clause with the conditional modifier must be a scalar variable."
1380
+ 52:
1381
+ citation: "OpenMP 5.2 §5.4.5, p.116"
1382
+ text: "A list item that appears in a lastprivate clause with the conditional modifier must be a scalar variable."
1383
+ 60:
1384
+ citation: "OpenMP 6.0 §7.5.5, p.231"
1385
+ text: "A list item that appears in a lastprivate clause with the conditional modifier must be a scalar variable."
1386
+
1387
+ - id: reduction-dsa-001
1388
+ check: static
1389
+ status: provisional
1390
+ predicate: reduction_shared_in_parallel
1391
+ example: "!$omp parallel private(x) / !$omp do reduction(+: x) / ..."
1392
+ notes: "5.2 only: 6.0 §7.6.10 allows an original list item that the data-sharing rules make private (original-sharing-modifier default). Lexical."
1393
+ spec:
1394
+ 50:
1395
+ citation: "OpenMP 5.0 §2.19.5.4, p.301"
1396
+ text: "A list item that appears in a reduction clause of a worksharing construct must be shared in the parallel region to which a corresponding worksharing region binds."
1397
+ 52:
1398
+ citation: "OpenMP 5.2 §5.5.8, p.135"
1399
+ text: "A list item that appears in a reduction clause on a worksharing construct must be shared in the parallel region to which a corresponding worksharing region binds."
1400
+
1401
+ - id: reduction-dsa-002
1402
+ check: static
1403
+ status: provisional
1404
+ predicate: reduction_shared_in_teams
1405
+ example: "!$omp teams private(x) / !$omp distribute reduction(+: x) / ..."
1406
+ notes: "6.0 only. Lexical: distribute or loop in teams."
1407
+ spec:
1408
+ 60:
1409
+ citation: "OpenMP 6.0 §7.6.10, p.254"
1410
+ text: "A list item that appears in a reduction clause on a work-distribution construct for which the corresponding region binds to a teams region must be shared in the teams region."
1411
+
1412
+ - id: reduction-clause-006
1413
+ check: static
1414
+ status: provisional
1415
+ predicate: reduction_section_base
1416
+ example: "!$omp parallel do reduction(+: s%a(1:n))"
1417
+ notes: "Array sections in reduction, in_reduction (6.0: induction) clauses: base not a name; integer literal bounds lb > ub; 5.2 also a literal stride other than 1 (not contiguous)."
1418
+ spec:
1419
+ 50:
1420
+ citation: "OpenMP 5.0 §2.19.5.1, p.297"
1421
+ text: "If a list item is an array section, it must specify contiguous storage and it cannot be a zero-length array section."
1422
+ also: ["OpenMP 5.0 §2.19.5.1, p.297"]
1423
+ 52:
1424
+ citation: "OpenMP 5.2 §5.5.5, p.132"
1425
+ text: "If a list item is an array section, it must specify contiguous storage, it cannot be a zero-length array section and its base expression must be a base language identifier."
1426
+ 60:
1427
+ citation: "OpenMP 6.0 §7.6.5, p.247"
1428
+ text: "If a list item is an array section, it must not be a zero-length array section and its array base must be a base language identifier."
1429
+
1430
+ - id: copyin-clause-001
1431
+ check: static
1432
+ status: provisional
1433
+ predicate: copyin_threadprivate
1434
+ example: "real :: x / !$omp parallel copyin(x)"
1435
+ notes: "Context requirement: the item is declared in the source (no USE may supply it) and no threadprivate directive in the source names it."
1436
+ spec:
1437
+ 50:
1438
+ citation: "OpenMP 5.0 §2.19.6.1, p.311"
1439
+ text: "A list item that appears in a copyin clause must be threadprivate."
1440
+ 52:
1441
+ citation: "OpenMP 5.2 §5.7.1, p.145"
1442
+ text: "A list item that appears in a copyin clause must be threadprivate."
1443
+ 60:
1444
+ citation: "OpenMP 6.0 §7.8.1, p.272"
1445
+ text: "A list item that appears in a copyin clause must be threadprivate."
1446
+
1447
+ - id: threadprivate-clause-001
1448
+ check: static
1449
+ status: provisional
1450
+ predicate: threadprivate_only_copyin
1451
+ example: "!$omp threadprivate(x) / !$omp parallel private(x)"
1452
+ notes: ""
1453
+ spec:
1454
+ 50:
1455
+ citation: "OpenMP 5.0 §2.19.2, p.277"
1456
+ text: "A threadprivate variable must not appear in any clause except the copyin, copyprivate, schedule, num_threads, thread_limit, and if clauses."
1457
+ 52:
1458
+ citation: "OpenMP 5.2 §5.2, p.103"
1459
+ text: "A threadprivate variable must not appear as the base variable of a list item in any clause except for the copyin and copyprivate clauses."
1460
+ 60:
1461
+ citation: "OpenMP 6.0 §7.3, p.217"
1462
+ text: "A threadprivate variable must not appear as the base variable of a list item in any clause except for the copyin and copyprivate clauses."
1463
+
1464
+ - id: threadprivate-placement-001
1465
+ lang: f90
1466
+ check: static
1467
+ status: provisional
1468
+ predicate: threadprivate_in_specification_part
1469
+ example: "!$omp parallel / !$omp threadprivate(x) / !$omp end parallel"
1470
+ notes: ""
1471
+ spec:
1472
+ 50:
1473
+ citation: "OpenMP 5.0 §2.19.2, p.278"
1474
+ text: "The threadprivate directive must appear in the declaration section of a scoping unit in which the common block or variable is declared."
1475
+ 52:
1476
+ citation: "OpenMP 5.2 §5.2, p.104"
1477
+ text: "The threadprivate directive must appear in the declaration section of a scoping unit in which the common block or variable is declared."
1478
+ 60:
1479
+ citation: "OpenMP 6.0 §7.3, p.219"
1480
+ text: "The threadprivate directive must appear in the declaration section of a scoping unit in which the common block or variable is declared."
1481
+
1482
+ - id: threadprivate-placement-002
1483
+ lang: f90
1484
+ check: static
1485
+ status: provisional
1486
+ predicate: threadprivate_declaring_scope
1487
+ example: "module m / real, save :: x / contains / subroutine s / !$omp threadprivate(x)"
1488
+ notes: ""
1489
+ spec:
1490
+ 50:
1491
+ citation: "OpenMP 5.0 §2.19.2, p.278"
1492
+ text: "A variable can only appear in a threadprivate directive in the scope in which it is declared. It must not be an element of a common block or appear in an EQUIVALENCE statement."
1493
+ 52:
1494
+ citation: "OpenMP 5.2 §5.2, p.105"
1495
+ text: "A variable may only appear as an argument in a threadprivate directive in the scope in which it is declared. It must not be an element of a common block or appear in an EQUIVALENCE statement."
1496
+ 60:
1497
+ citation: "OpenMP 6.0 §7.3, p.219"
1498
+ text: "A variable may only appear as an argument in a threadprivate directive in the scope in which it is declared. It must not be an element of a common block or appear in an EQUIVALENCE statement."
1499
+
1500
+ - id: threadprivate-storage-001
1501
+ lang: f90
1502
+ check: static
1503
+ status: provisional
1504
+ predicate: threadprivate_saved
1505
+ example: "subroutine s / real :: x / !$omp threadprivate(x)"
1506
+ notes: "Variables of a main program, module or submodule have SAVE implicitly (Fortran 2008 §5.3.16); an initializer implies SAVE."
1507
+ spec:
1508
+ 50:
1509
+ citation: "OpenMP 5.0 §2.19.2, p.278"
1510
+ text: "A variable that appears in a threadprivate directive must be declared in the scope of a module or have the SAVE attribute, either explicitly or implicitly."
1511
+ 52:
1512
+ citation: "OpenMP 5.2 §5.2, p.105"
1513
+ text: "A variable that appears as an argument in a threadprivate directive must be declared in the scope of a module or have the SAVE attribute, either explicitly or implicitly."
1514
+ 60:
1515
+ citation: "OpenMP 6.0 §7.3, p.219"
1516
+ text: "A variable that appears as an argument in a threadprivate directive must be declared in the scope of a module or have the SAVE attribute, either explicitly or implicitly."
1517
+
1518
+ - id: declaretarget-storage-001
1519
+ lang: f90
1520
+ check: static
1521
+ status: provisional
1522
+ predicate: declare_target_enter_saved
1523
+ example: "subroutine s / real :: x / !$omp declare target enter(x)"
1524
+ notes: "5.2: every variable of the directive; 6.0: enter clause (and the extended list, an implicit enter)."
1525
+ spec:
1526
+ 50:
1527
+ citation: "OpenMP 5.0 §2.12.7, p.184"
1528
+ text: "A variable that appears in a declare target directive must be declared in the Fortran scope of a module or have the SAVE attribute, either explicitly or implicitly."
1529
+ 52:
1530
+ citation: "OpenMP 5.2 §7.8.1, p.207"
1531
+ text: "A variable that appears in a declare target directive must be declared in the Fortran scope of a module or have the SAVE attribute, either explicitly or implicitly."
1532
+ 60:
1533
+ citation: "OpenMP 6.0 §7.9.7, p.290"
1534
+ text: "Each list item must have static storage duration."
1535
+
1536
+ - id: declaretarget-storage-002
1537
+ check: static
1538
+ status: provisional
1539
+ predicate: declare_target_link_saved
1540
+ example: "subroutine s / real :: x / !$omp declare target link(x)"
1541
+ notes: "6.0 only (5.2: declaretarget-storage-001)."
1542
+ spec:
1543
+ 60:
1544
+ citation: "OpenMP 6.0 §7.9.8, p.291"
1545
+ text: "Each list item must have static storage duration."
1546
+
1547
+ - id: declaretarget-placement-002
1548
+ lang: f90
1549
+ check: static
1550
+ status: provisional
1551
+ predicate: declare_target_declaring_scope
1552
+ example: "module m / real :: x / contains / subroutine s / !$omp declare target enter(x)"
1553
+ notes: ""
1554
+ spec:
1555
+ 50:
1556
+ citation: "OpenMP 5.0 §2.12.7, p.184"
1557
+ text: "A variable can only appear in a declare target directive in the scope in which it is declared. It must not be an element of a common block or appear in an EQUIVALENCE statement."
1558
+ 52:
1559
+ citation: "OpenMP 5.2 §7.8.1, p.207"
1560
+ text: "A variable can only appear in a declare target directive in the scope in which it is declared. It must not be an element of a common block or appear in an EQUIVALENCE statement."
1561
+ 60:
1562
+ citation: "OpenMP 6.0 §9.9.1, p.348"
1563
+ text: "A variable can only appear in a declare_target directive in the scope in which it is declared. It must not be an element of a common block or appear in an EQUIVALENCE statement."
1564
+
1565
+ - id: declaretarget-placement-003
1566
+ lang: f90
1567
+ check: static
1568
+ status: provisional
1569
+ predicate: declare_target_procedure_placement
1570
+ example: "module m / !$omp declare target"
1571
+ notes: "5.2 is read as 'no clauses, or only device_type/indirect' (with an enter, to or link clause the directive names its list items; the literal 5.2 text would also confine 'enter(x) device_type(any)' to subprograms, owner point). 6.0: the declaration-associated form (no extended list, no enter/link/local)."
1572
+ spec:
1573
+ 50:
1574
+ citation: "OpenMP 5.0 §2.12.7, p.184"
1575
+ text: "Any declare target directive without clauses must appear in a specification part of a subroutine subprogram, function subprogram or interface body to which it applies."
1576
+ 52:
1577
+ citation: "OpenMP 5.2 §7.8.1, p.206"
1578
+ text: "If no clauses are specified or if a device_type clause is specified, the directive must appear in a specification part of a subroutine subprogram, function subprogram or interface body."
1579
+ 60:
1580
+ citation: "OpenMP 6.0 §9.9.1, p.348"
1581
+ text: "If the directive is a declaration-associated directive, the directive must appear in the specification part of a subroutine subprogram, function subprogram or interface body."
1582
+
1583
+ - id: declaretarget-clause-004
1584
+ check: static
1585
+ status: provisional
1586
+ predicate: declare_target_enter_link
1587
+ example: "!$omp declare target enter(x) / !$omp declare target link(x)"
1588
+ notes: ""
1589
+ spec:
1590
+ 50:
1591
+ citation: "OpenMP 5.0 §2.12.7, p.183"
1592
+ text: "The same list item must not explicitly appear in both a to clause on one declare target directive and a link clause on another declare target directive."
1593
+ 52:
1594
+ citation: "OpenMP 5.2 §7.8, p.205"
1595
+ text: "The same list item must not explicitly appear in both a enter clause on one declare target directive and a link clause on another declare target directive."
1596
+ 60:
1597
+ citation: "OpenMP 6.0 §9.9, p.346"
1598
+ text: "The same list item must not explicitly appear in both an enter clause on one declare target directive and a link or local clause on another declare target directive."
1599
+
1600
+ - id: declaretarget-clause-005
1601
+ check: static
1602
+ status: provisional
1603
+ predicate: declare_target_link_local
1604
+ example: "!$omp declare target link(x) / !$omp declare target local(x)"
1605
+ notes: "6.0 only."
1606
+ spec:
1607
+ 60:
1608
+ citation: "OpenMP 6.0 §9.9, p.346"
1609
+ text: "The same list item must not explicitly appear in both a link clause on one declare target directive and a local clause on another declare target directive."
1610
+
1611
+ - id: indirect-clause-001
1612
+ check: static
1613
+ status: provisional
1614
+ predicate: indirect_device_type_any
1615
+ example: "!$omp declare target enter(f) indirect device_type(host)"
1616
+ notes: ""
1617
+ spec:
1618
+ 52:
1619
+ citation: "OpenMP 5.2 §7.8.3, p.209"
1620
+ text: "If invoked-by-fptr evaluates to true, a device_type clause must not appear on the same directive unless it specifies any. for its device-type-description."
1621
+ 60:
1622
+ citation: "OpenMP 6.0 §9.9.3, p.351"
1623
+ text: "If invoked-by-fptr evaluates to true, a device_type clause must not appear on the same directive unless it specifies any for its device-type-description."
1624
+
1625
+ - id: map-clause-002
1626
+ check: static
1627
+ status: provisional
1628
+ predicate: map_device_local
1629
+ example: "!$omp declare target local(x) / !$omp target map(x)"
1630
+ notes: "6.0 only (groupprivate is outside the slice)."
1631
+ spec:
1632
+ 60:
1633
+ citation: "OpenMP 6.0 §7.9.6, p.286"
1634
+ text: "A variable that is a groupprivate variable or a device-local variable must not appear as a list item in a map clause."
1635
+
1636
+ - id: target-map-002
1637
+ check: static
1638
+ status: provisional
1639
+ predicate: target_map_structure_elements
1640
+ example: "!$omp target map(s%a) / s%b = 1 / !$omp end target"
1641
+ notes: "Lexical extent only."
1642
+ spec:
1643
+ 50:
1644
+ citation: "OpenMP 5.0 §2.12.5, p.174"
1645
+ text: "If a list item in a map clause is a structure element, any other element of that structure that is referenced in the target construct must also appear as a list item in a map clause."
1646
+ 52:
1647
+ citation: "OpenMP 5.2 §13.8, p.286"
1648
+ text: "If a list item in a map clause is a structure element, any other element of that structure that is referenced in the target construct must also appear as a list item in a map clause."
1649
+ 60:
1650
+ citation: "OpenMP 6.0 §15.8, p.462"
1651
+ text: "If a list item in a map clause is a structure element, any other element of that structure that is referenced in the target construct must also appear as a list item in a map clause."
1652
+
1653
+ - id: defaultmap-map-003
1654
+ check: static
1655
+ status: provisional
1656
+ predicate: defaultmap_none_listed
1657
+ example: "!$omp target defaultmap(none) / b = a / !$omp end target"
1658
+ notes: "Only defaultmap(none) without a category or with all (the categories need types the scanner does not read). As default-dsa-001: lexical, declared variables only."
1659
+ spec:
1660
+ 50:
1661
+ citation: "OpenMP 5.0 §2.19.7.2, p.325"
1662
+ text: "If implicit-behavior is none, each variable referenced in the construct that does not have a predetermined data-sharing attribute and does not appear in a to or link clause on a declare target directive must be listed in a data-mapping attribute clause, a data-sharing attribute clause (including a data-sharing attribute clause on a combined construct where target is one of the constituent constructs), or an is_device_ptr clause."
1663
+ 52:
1664
+ citation: "OpenMP 5.2 §5.8.7, p.162"
1665
+ text: "If implicit-behavior is none, each variable that is specified by variable-category and is referenced in the construct but does not have a predetermined data-sharing and does not appear in an enter or link clause on a declare target directive must be explicitly listed in a data-environment attribute clause on the construct."
1666
+ 60:
1667
+ citation: "OpenMP 6.0 §7.9.9, p.292"
1668
+ text: "If implicit-behavior is none, each variable that is specified by variable-category and is referenced in the construct but does not have a predetermined data-sharing attribute and does not appear in an enter or link clause on a declare_target directive must be explicitly listed in a data-environment attribute clause on the construct."
1669
+
1670
+ - id: allocate-clause-001
1671
+ check: static
1672
+ status: provisional
1673
+ predicate: allocate_needs_private_clause
1674
+ example: "!$omp parallel allocate(x)"
1675
+ notes: ""
1676
+ spec:
1677
+ 50:
1678
+ citation: "OpenMP 5.0 §2.11.4, p.159"
1679
+ text: "For any list item that is specified in the allocate clause on a directive, a data-sharing attribute clause that may create a private copy of that list item must be specified on the same directive."
1680
+ 52:
1681
+ citation: "OpenMP 5.2 §6.6, p.179"
1682
+ text: "For any list item that is specified in the allocate clause on a directive other than the allocators directive, a data-sharing attribute clause that may create a private copy of that list item must be specified on the same directive."
1683
+ 60:
1684
+ citation: "OpenMP 6.0 §8.6, p.313"
1685
+ text: "For any list item that is specified in the allocate clause on a directive other than the allocators directive, a data-sharing attribute clause that may create a private copy of that list item must be specified on the same directive."
1686
+
1687
+ - id: allocate-clause-002
1688
+ check: static
1689
+ status: provisional
1690
+ predicate: allocate_target_allocator
1691
+ example: "!$omp target private(x) allocate(x)"
1692
+ notes: "The same compilation unit is the program unit (Fortran)."
1693
+ spec:
1694
+ 50:
1695
+ citation: "OpenMP 5.0 §2.11.4, p.159"
1696
+ text: "allocate clauses that appear on a target construct or on constructs in a target region must specify an allocator expression unless a requires directive with the dynamic_allocators clause is present in the same compilation unit."
1697
+ 52:
1698
+ citation: "OpenMP 5.2 §6.6, p.179"
1699
+ text: "allocate clauses that appear on a target construct or on constructs in a target region must specify an allocator-simple-modifier or allocator-complex-modifier unless a requires directive with the dynamic_allocators clause is present in the same compilation unit."
1700
+ 60:
1701
+ citation: "OpenMP 6.0 §8.6, p.313"
1702
+ text: "allocate clauses that appear on a target construct or on constructs in a target region must specify an allocator-simple-modifier or allocator-complex-modifier unless a requires directive with the dynamic_allocators clause is present in the same compilation unit."
1703
+
1704
+ - id: usesallocators-clause-001
1705
+ check: static
1706
+ status: provisional
1707
+ predicate: uses_allocators_not_in_other_clauses
1708
+ example: "!$omp target uses_allocators(a) firstprivate(a)"
1709
+ notes: ""
1710
+ spec:
1711
+ 50:
1712
+ citation: "OpenMP 5.0 §2.12.5, p.175"
1713
+ text: "Memory allocators that appear in a uses_allocators clause cannot appear in other data-sharing attribute clauses or data-mapping attribute clauses in the same construct."
1714
+ 52:
1715
+ citation: "OpenMP 5.2 §6.8, p.182"
1716
+ text: "The allocator argument must not appear in other data-sharing attribute clauses or data-mapping attribute clauses on the same construct."
1717
+ 60:
1718
+ citation: "OpenMP 6.0 §8.8, p.316"
1719
+ text: "The allocator argument must not appear in other data-sharing attribute clauses or data-mapping attribute clauses on the same construct."
1720
+
1721
+ - id: usesallocators-clause-002
1722
+ check: static
1723
+ status: provisional
1724
+ predicate: uses_allocators_predefined_no_modifiers
1725
+ example: "!$omp target uses_allocators(memspace(omp_default_mem_space): omp_default_mem_alloc)"
1726
+ notes: ""
1727
+ spec:
1728
+ 50:
1729
+ citation: "OpenMP 5.0 §2.12.5, p.175"
1730
+ text: "Predefined allocators appearing in a uses_allocators clause cannot have traits specified."
1731
+ 52:
1732
+ citation: "OpenMP 5.2 §6.8, p.182"
1733
+ text: "If allocator is a predefined allocator, no modifiers may be specified."
1734
+ 60:
1735
+ citation: "OpenMP 6.0 §8.8, p.316"
1736
+ text: "If allocator is an identifier that matches the name of a predefined allocator, no modifiers may be specified."
1737
+
1738
+ - id: usesallocators-clause-003
1739
+ check: static
1740
+ status: provisional
1741
+ predicate: uses_allocators_predefined_memspace
1742
+ example: "!$omp target uses_allocators(memspace(my_space): a)"
1743
+ notes: ""
1744
+ spec:
1745
+ 52:
1746
+ citation: "OpenMP 5.2 §6.8, p.182"
1747
+ text: "The memspace-handle argument for the mem-space modifier must be an identifier that matches one of the predefined memory space names."
1748
+ 60:
1749
+ citation: "OpenMP 6.0 §8.8, p.317"
1750
+ text: "The memspace-handle argument for the mem-space modifier must be an identifier that matches one of the predefined memory space names."
1751
+
1752
+ - id: usesallocators-clause-004
1753
+ check: static
1754
+ status: provisional
1755
+ predicate: uses_allocators_traits_constant
1756
+ example: "type(omp_alloctrait) :: t(1) / !$omp target uses_allocators(traits(t): a)"
1757
+ notes: "Flags a traits array declared in the source as a variable (not a named constant)."
1758
+ spec:
1759
+ 50:
1760
+ citation: "OpenMP 5.0 §2.12.5, p.175"
1761
+ text: "Arrays that contain allocator traits that appear in a uses_allocators clause must be constant arrays, have constant values and be defined in the same scope as the construct in which the clause appears."
1762
+ 52:
1763
+ citation: "OpenMP 5.2 §6.8, p.182"
1764
+ text: "The traits argument for the traits-array modifier must be a constant array, have constant values and be defined in the same scope as the construct on which the clause appears."
1765
+ 60:
1766
+ citation: "OpenMP 6.0 §8.8, p.317"
1767
+ text: "The traits argument for the traits-array modifier must be a named constant of rank one."
1768
+
1769
+ - id: requires-placement-003
1770
+ check: static
1771
+ status: provisional
1772
+ predicate: requires_mem_order_before_atomic
1773
+ example: "!$omp atomic / x = x + 1 / !$omp requires atomic_default_mem_order(seq_cst)"
1774
+ notes: "Same program unit."
1775
+ spec:
1776
+ 50:
1777
+ citation: "OpenMP 5.0 §2.4, p.63"
1778
+ text: "The requires directive with atomic_default_mem_order clause may not appear lexically after any atomic construct on which memory-order-clause is not specified."
1779
+ 52:
1780
+ citation: "OpenMP 5.2 §8.2, p.211"
1781
+ text: "A requires directive that specifies the atomic_default_mem_order requirement must not appear lexically after any atomic construct on which memory-order-clause is not specified."
1782
+ 60:
1783
+ citation: "OpenMP 6.0 §10.5.1.1, p.357"
1784
+ text: "Any directive that specifies the atomic_default_mem_order clause must not appear lexically after any atomic construct on which a memory-order clause is not specified."
1785
+
1786
+ - id: requires-placement-004
1787
+ check: static
1788
+ status: provisional
1789
+ predicate: requires_same_in_all_units
1790
+ example: "module m / !$omp declare target enter(x) / end module / program p / !$omp requires unified_shared_memory / ..."
1791
+ notes: "Within one source: the program units (Fortran compilation units) that contain declare target directives or device constructs. A unit inherits the requires of the source's modules that it USEs (5.2 §8.2: 'by referencing a module'). 6.0 device global requirements: reverse_offload, unified_address, unified_shared_memory, self_maps."
1792
+ spec:
1793
+ 50:
1794
+ citation: "OpenMP 5.0 §2.4, p.63"
1795
+ text: "A requires directive with any of the following clauses must appear in all compilation units of a program that contain device constructs or device routines or in none of them: – reverse_offload – unified_address – unified_shared_memory"
1796
+ 52:
1797
+ citation: "OpenMP 5.2 §8.2, p.211"
1798
+ text: "Either all compilation units of a program that contain declare target directives, device constructs or device routines or none of them must specify a requires directive that specifies the reverse_offload, unified_address or unified_shared_memory requirement."
1799
+ 60:
1800
+ citation: "OpenMP 6.0 §10.5.1, p.356"
1801
+ text: "All compilation units of a program that contain declare target directives, device constructs or device procedures must specify the same set of requirements that are defined by clauses with the device global requirement property in the requirement clause group."
1802
+
1803
+ - id: depend-clause-001
1804
+ check: static
1805
+ status: provisional
1806
+ predicate: depend_all_memory_out_inout
1807
+ example: "!$omp task depend(in: omp_all_memory)"
1808
+ notes: ""
1809
+ spec:
1810
+ 52:
1811
+ citation: "OpenMP 5.2 §15.9.5, p.325"
1812
+ text: "The omp_all_memory reserved locator can only be used in a depend clause with an out or inout task-dependence-type."
1813
+ 60:
1814
+ citation: "OpenMP 6.0 §17.9.5, p.509"
1815
+ text: "The omp_all_memory reserved locator can only be used in a depend clause with an out or inout task-dependence-type."
1816
+
1817
+ - id: depend-clause-002
1818
+ check: static
1819
+ status: provisional
1820
+ predicate: depend_depobj_no_section
1821
+ example: "!$omp task depend(depobj: o(1:2))"
1822
+ notes: ""
1823
+ spec:
1824
+ 50:
1825
+ citation: "OpenMP 5.0 §2.17.11, p.258"
1826
+ text: "Array sections cannot be specified in depend clauses with the depobj dependence type."
1827
+ 52:
1828
+ citation: "OpenMP 5.2 §15.9.5, p.325"
1829
+ text: "Array sections cannot be specified in depend clauses with the depobj task-dependence-type."
1830
+ 60:
1831
+ citation: "OpenMP 6.0 §17.9.5, p.509"
1832
+ text: "Array sections cannot be specified in depend clauses with the depobj task-dependence-type."
1833
+
1834
+ - id: depend-clause-003
1835
+ lang: f90
1836
+ check: static
1837
+ status: provisional
1838
+ predicate: depend_no_common_block
1839
+ example: "!$omp task depend(in: /blk/)"
1840
+ notes: ""
1841
+ spec:
1842
+ 50:
1843
+ citation: "OpenMP 5.0 §2.17.11, p.259"
1844
+ text: "A common block name cannot appear in a depend clause."
1845
+ 52:
1846
+ citation: "OpenMP 5.2 §15.9.5, p.325"
1847
+ text: "A common block name cannot appear in a depend clause."
1848
+ 60:
1849
+ citation: "OpenMP 6.0 §17.9.5, p.510"
1850
+ text: "A common block name cannot appear in a depend clause."
1851
+
1852
+ - id: depend-clause-004
1853
+ check: static
1854
+ status: provisional
1855
+ predicate: depend_no_zero_length
1856
+ example: "!$omp task depend(in: a(5:4))"
1857
+ notes: "Integer literal bounds only."
1858
+ spec:
1859
+ 50:
1860
+ citation: "OpenMP 5.0 §2.17.11, p.258"
1861
+ text: "List items used in depend clauses cannot be zero-length array sections."
1862
+ 52:
1863
+ citation: "OpenMP 5.2 §15.9.5, p.325"
1864
+ text: "List items used in depend clauses cannot be zero-length array sections."
1865
+ 60:
1866
+ citation: "OpenMP 6.0 §17.9.5, p.509"
1867
+ text: "List items used in depend clauses cannot be zero-length array sections."
1868
+
1869
+ - id: taskwait-clause-001
1870
+ check: static
1871
+ status: provisional
1872
+ predicate: taskwait_no_mutexinoutset
1873
+ example: "!$omp taskwait depend(mutexinoutset: x)"
1874
+ notes: ""
1875
+ spec:
1876
+ 50:
1877
+ citation: "OpenMP 5.0 §2.17.5, p.232"
1878
+ text: "If the dependence-type of a depend clause is depobj then the dependence objects cannot represent dependences of the mutexinoutset dependence type."
1879
+ 52:
1880
+ citation: "OpenMP 5.2 §15.5, p.307"
1881
+ text: "The mutexinoutset dependence-type may not appear in a depend clause on a taskwait construct."
1882
+ 60:
1883
+ citation: "OpenMP 6.0 §17.5, p.480"
1884
+ text: "The mutexinoutset task-dependence-type may not appear in a depend clause on a taskwait construct."
1885
+
1886
+ - id: taskwait-clause-002
1887
+ check: static
1888
+ status: provisional
1889
+ predicate: taskwait_nowait_needs_depend
1890
+ example: "!$omp taskwait nowait"
1891
+ notes: ""
1892
+ spec:
1893
+ 52:
1894
+ citation: "OpenMP 5.2 §15.5, p.308"
1895
+ text: "The nowait clause may only appear on a taskwait directive if the depend clause is present."
1896
+ 60:
1897
+ citation: "OpenMP 6.0 §17.5, p.481"
1898
+ text: "The nowait clause may only appear on a taskwait directive if the depend clause is present."
1899
+
1900
+ - id: taskwait-clause-003
1901
+ check: static
1902
+ status: provisional
1903
+ predicate: taskwait_replayable_needs_depend
1904
+ example: "!$omp taskwait replayable"
1905
+ notes: "6.0 only."
1906
+ spec:
1907
+ 60:
1908
+ citation: "OpenMP 6.0 §17.5, p.481"
1909
+ text: "The replayable clause may only appear on a taskwait directive if the depend clause is present."
1910
+
1911
+ - id: depobj-clause-001
1912
+ check: static
1913
+ status: provisional
1914
+ predicate: depobj_one_locator
1915
+ example: "!$omp depobj(o) depend(in: a, b)"
1916
+ notes: "5.2 (6.0 replaced depend by init on depobj)."
1917
+ spec:
1918
+ 50:
1919
+ citation: "OpenMP 5.0 §2.17.10, p.255"
1920
+ text: "A depend clause on a depobj construct can only specify one locator."
1921
+ 52:
1922
+ citation: "OpenMP 5.2 §15.9.4, p.322"
1923
+ text: "A depend clause on a depobj construct must only specify one locator."
1924
+
1925
+ - id: update-clause-001
1926
+ check: static
1927
+ status: provisional
1928
+ predicate: depobj_update_not_depobj
1929
+ example: "!$omp depobj(o) update(depobj)"
1930
+ notes: ""
1931
+ spec:
1932
+ 52:
1933
+ citation: "OpenMP 5.2 §15.9.3, p.322"
1934
+ text: "task-dependence-type must not be depobj."
1935
+ 60:
1936
+ citation: "OpenMP 6.0 §17.9.4, p.506"
1937
+ text: "task-dependence-type must not be depobj."
1938
+
1939
+ - id: scan-placement-001
1940
+ check: static
1941
+ status: provisional
1942
+ predicate: scan_at_most_one
1943
+ example: "!$omp simd reduction(inscan, +: s) / do ... / !$omp scan inclusive(s) / ... / !$omp scan inclusive(s) / ..."
1944
+ notes: ""
1945
+ spec:
1946
+ 50:
1947
+ citation: "OpenMP 5.0 §2.9.6, p.134"
1948
+ text: "Exactly one scan directive must appear in the loop body of an enclosing worksharing-loop, worksharing-loop SIMD, or simd construct on which a reduction clause with the inscan modifier is present."
1949
+ 52:
1950
+ citation: "OpenMP 5.2 §5.6, p.142"
1951
+ text: "A separated construct must have at most one scan directive as a separating directive."
1952
+ 60:
1953
+ citation: "OpenMP 6.0 §7.7, p.268"
1954
+ text: "The separated construct must have at most one scan directive with an inclusive or exclusive clause as a separating directive."
1955
+
1956
+ - id: scan-placement-002
1957
+ check: static
1958
+ status: provisional
1959
+ predicate: scan_not_orphaned
1960
+ example: "!$omp scan inclusive(s) (not in a loop construct)"
1961
+ notes: "A scan directive whose closest enclosing construct has no do or simd leaf (or none)."
1962
+ spec:
1963
+ 50:
1964
+ citation: "OpenMP 5.0 §2.9.6, p.134"
1965
+ text: "Exactly one scan directive must appear in the loop body of an enclosing worksharing-loop, worksharing-loop SIMD, or simd construct on which a reduction clause with the inscan modifier is present."
1966
+ also: ["OpenMP 5.0 §2.9.6, p.132"]
1967
+ 52:
1968
+ citation: "OpenMP 5.2 §3.1, p.54"
1969
+ text: "Orphaned separating directives are prohibited. That is, the separating directives must appear within the structured block associated with the same construct with which it is associated and must not be encountered elsewhere in the region of that associated construct."
1970
+ 60:
1971
+ citation: "OpenMP 6.0 §5.1, p.155"
1972
+ text: "Orphaned separating directives are prohibited. That is, the separating directives must appear within the structured block associated with the same construct with which it is associated and must not be encountered elsewhere in the region of that separated construct."
1973
+
1974
+ - id: scan-clause-001
1975
+ check: static
1976
+ status: provisional
1977
+ predicate: scan_items_in_inscan_reduction
1978
+ example: "!$omp simd reduction(inscan, +: s) / ... / !$omp scan inclusive(t)"
1979
+ notes: ""
1980
+ spec:
1981
+ 50:
1982
+ citation: "OpenMP 5.0 §2.9.6, p.134"
1983
+ text: "A list item that appears in the inclusive or exclusive clause must appear in a reduction clause with the inscan modifier on the enclosing worksharing-loop, worksharing-loop SIMD, or simd construct."
1984
+ 52:
1985
+ citation: "OpenMP 5.2 §5.6, p.142"
1986
+ text: "Each list item that appears in the inclusive or exclusive clause must appear in a reduction clause with the inscan modifier on the separated construct."
1987
+ 60:
1988
+ citation: "OpenMP 6.0 §7.7, p.268"
1989
+ text: "Each list item that appears in the inclusive or exclusive clause must appear in a reduction clause with the inscan modifier on the separated construct."
1990
+
1991
+ - id: scan-clause-002
1992
+ check: static
1993
+ status: provisional
1994
+ predicate: inscan_items_on_scan
1995
+ example: "!$omp simd reduction(inscan, +: s, t) / ... / !$omp scan inclusive(s)"
1996
+ notes: "Also the reduction-clause sentence 5.2 §5.5.8 p.135 / 6.0 §7.6.10 p.254 ('must appear as a list item in an inclusive or exclusive clause on a scan directive enclosed by the construct')."
1997
+ spec:
1998
+ 50:
1999
+ citation: "OpenMP 5.0 §2.19.5.4, p.301"
2000
+ text: "A list item that appears in a reduction clause with the inscan reduction-modifier must appear as a list item in an inclusive or exclusive clause on a scan directive enclosed by the construct."
2001
+ 52:
2002
+ citation: "OpenMP 5.2 §5.6, p.142"
2003
+ text: "Each list item that appears in a reduction clause with the inscan modifier on the separated construct must appear in a clause on the separating scan directive."
2004
+ also: ["OpenMP 5.2 §5.5.8, p.135"]
2005
+ 60:
2006
+ citation: "OpenMP 6.0 §7.7, p.268"
2007
+ text: "Each list item that appears in a reduction clause with the inscan modifier on the separated construct must appear in a clause on the scan separating directive."
2008
+ also: ["OpenMP 6.0 §7.6.10, p.254"]
2009
+
2010
+ - id: scan-loop-001
2011
+ check: static
2012
+ status: provisional
2013
+ predicate: scan_perfectly_nested
2014
+ example: "!$omp do collapse(2) reduction(inscan, +: s) / do i / x = 1 / do j ... !$omp scan ..."
2015
+ notes: ""
2016
+ spec:
2017
+ 52:
2018
+ citation: "OpenMP 5.2 §5.6, p.142"
2019
+ text: "The loops that are associated with the directive to which the scan directive is associated must all be perfectly nested."
2020
+ 60:
2021
+ citation: "OpenMP 6.0 §7.7, p.268"
2022
+ text: "The affected loops of the separated construct must all be perfectly nested loops."
2023
+
2024
+ - id: declaresimd-placement-001
2025
+ lang: f90
2026
+ check: static
2027
+ status: provisional
2028
+ predicate: declare_simd_in_subprogram
2029
+ example: "program p / !$omp declare simd(f)"
2030
+ notes: ""
2031
+ spec:
2032
+ 50:
2033
+ citation: "OpenMP 5.0 §2.9.3.3, p.119"
2034
+ text: "Any declare simd directive must appear in the specification part of a subroutine subprogram, function subprogram or interface body to which it applies."
2035
+ 52:
2036
+ citation: "OpenMP 5.2 §7.7, p.203"
2037
+ text: "Any declare simd directive must appear in the specification part of a subroutine subprogram, function subprogram, or interface body to which it applies."
2038
+ 60:
2039
+ citation: "OpenMP 6.0 §9.8, p.342"
2040
+ text: "Any declare_simd directive must appear in the specification part of a subroutine subprogram, function subprogram, or interface body to which it applies."
2041
+
2042
+ - id: declaremapper-clause-001
2043
+ check: static
2044
+ status: provisional
2045
+ predicate: declare_mapper_no_release_delete
2046
+ example: "!$omp declare mapper(t :: v) map(release: v)"
2047
+ notes: "5.2 only (6.0 has no such sentence; release is a map-type there)."
2048
+ spec:
2049
+ 52:
2050
+ citation: "OpenMP 5.2 §5.8.8, p.164"
2051
+ text: "Neither the release or delete map-type may be specified on any map clause."
2052
+
2053
+ - id: declaremapper-clause-002
2054
+ check: static
2055
+ status: provisional
2056
+ predicate: declare_mapper_modifier_default
2057
+ example: "!$omp declare mapper(t :: v) map(mapper(m), tofrom: v)"
2058
+ notes: ""
2059
+ spec:
2060
+ 52:
2061
+ citation: "OpenMP 5.2 §5.8.8, p.164"
2062
+ text: "If a mapper-modifier is specified for a map clause, its parameter must be default."
2063
+ 60:
2064
+ citation: "OpenMP 6.0 §7.9.10, p.294"
2065
+ text: "If a mapper modifier is specified for a map clause, its parameter must be default."
2066
+
2067
+ - id: declaremapper-clause-003
2068
+ check: static
2069
+ status: provisional
2070
+ predicate: declare_mapper_unique
2071
+ example: "!$omp declare mapper(t :: v) map(v) / !$omp declare mapper(t :: w) map(w)"
2072
+ notes: "Same scoping unit, same identifier (default when omitted), same type name."
2073
+ spec:
2074
+ 50:
2075
+ citation: "OpenMP 5.0 §2.19.7.3, p.328"
2076
+ text: "A mapper-identifier may not be redeclared in the current scope for the same type or for a type that is compatible according to the base language rules."
2077
+ 52:
2078
+ citation: "OpenMP 5.2 §5.8.8, p.164"
2079
+ text: "Multiple declare mapper directives that specify the same mapper-identifier for the same base language type or for compatible base language types, according to the base language rules, may not appear in the same scope."
2080
+ 60:
2081
+ citation: "OpenMP 6.0 §7.9.10, p.294"
2082
+ text: "Multiple declare_mapper directives that specify the same mapper-identifier for the same base language type or for compatible base language types, according to the base language rules, must not appear in the same scope."
2083
+
2084
+ - id: declaremapper-clause-004
2085
+ lang: f90
2086
+ check: static
2087
+ status: provisional
2088
+ predicate: declare_mapper_type_not_intrinsic
2089
+ example: "!$omp declare mapper(integer :: v) map(v)"
2090
+ notes: "Fortran: an intrinsic type; an abstract type the source defines (5.0, 5.2, 6.0); a parameterized derived type the source defines (6.0 only)."
2091
+ spec:
2092
+ 50:
2093
+ citation: "OpenMP 5.0 §2.19.7.3, p.327"
2094
+ text: "The type must be of struct, union or class type in C and C++ or a non-intrinsic type in Fortran."
2095
+ also: ["OpenMP 5.0 §2.19.7.3, p.328"]
2096
+ 52:
2097
+ citation: "OpenMP 5.2 §5.8.8, p.164"
2098
+ text: "type must not be an intrinsic type or an abstract type."
2099
+ 60:
2100
+ citation: "OpenMP 6.0 §7.9.10, p.295"
2101
+ text: "type must not be an intrinsic type, a parameterized derived type, an enum type, or an enumeration type."
2102
+
2103
+ - id: declaremapper-clause-005
2104
+ check: static
2105
+ status: provisional
2106
+ predicate: declare_mapper_maps_var
2107
+ example: "!$omp declare mapper(t :: v) map(w)"
2108
+ notes: ""
2109
+ spec:
2110
+ 50:
2111
+ citation: "OpenMP 5.0 §2.19.7.3, p.327"
2112
+ text: "At least one map clause that maps var or at least one element of var is required."
2113
+ 52:
2114
+ citation: "OpenMP 5.2 §5.8.8, p.164"
2115
+ text: "At least one map clause that maps var or at least one element of var is required."
2116
+ 60:
2117
+ citation: "OpenMP 6.0 §7.9.10, p.294"
2118
+ text: "At least one map clause that maps var or at least one element of var is required."
2119
+
2120
+ - id: inreduction-clause-001
2121
+ check: static
2122
+ status: provisional
2123
+ predicate: in_reduction_matching_item
2124
+ example: "!$omp taskgroup task_reduction(+: x) / !$omp task in_reduction(*: x)"
2125
+ notes: "Lexical: the closest enclosing construct with the item in task_reduction or reduction(task, ...) must use the same identifier; in a main program (no caller) one must exist."
2126
+ spec:
2127
+ 50:
2128
+ citation: "OpenMP 5.0 §2.19.5.6, p.304"
2129
+ text: "A list item that appears in a task_reduction clause or a reduction clause with the task modifier that is specified on a construct that corresponds to a region in which the region of the participating task is closely nested must match each list item. The construct that corresponds to the innermost enclosing region that meets this condition must specify the same reduction-identifier for the matching list item as the in_reduction clause."
2130
+ 52:
2131
+ citation: "OpenMP 5.2 §5.5.10, p.139"
2132
+ text: "A list item that appears in a task_reduction clause or a reduction clause with task as the reduction-modifier that is specified on a construct that corresponds to a region in which the region of the participating task is closely nested must match each list item. The construct that corresponds to the innermost enclosing region that meets this condition must specify the same reduction-identifier for the matching list item as the in_reduction clause."
2133
+ 60:
2134
+ citation: "OpenMP 6.0 §7.6.12, p.257"
2135
+ text: "For each list item, a matching list item must exist that appears in a task_reduction clause or a reduction clause with the task reduction-modifier that is specified on a construct that corresponds to a region in which the region of the participating task is closely nested. The construct that corresponds to the innermost enclosing region that meets this condition must specify the same reduction-identifier for the matching list item as the in_reduction clause."
2136
+
2137
+ - id: exit-loop-001
2138
+ lang: f90
2139
+ check: static
2140
+ status: provisional
2141
+ predicate: exit_from_associated_loop
2142
+ example: "!$omp parallel do / do i = 1, n / if (i > 3) exit / end do"
2143
+ notes: "An EXIT (unnamed: the innermost DO; named: that DO) that terminates one of the associated loops."
2144
+ spec:
2145
+ 50:
2146
+ citation: "OpenMP 5.0 §2.9.2, p.108"
2147
+ text: "No statement in the associated loops other than the DO statements can cause a branch out of the loops."
2148
+ also: ["OpenMP 5.0 §2.9.5, p.131"]
2149
+ 52:
2150
+ citation: "OpenMP 5.2 §4.4.1, p.91"
2151
+ text: "final-loop-body must not contain any EXIT statement that would cause the termination of the innermost loop."
2152
+ also: ["OpenMP 5.2 §4.4.1, p.87"]
2153
+ 60:
2154
+ citation: "OpenMP 6.0 §6.4.1, p.201"
2155
+ text: "final-loop-body must not contain any EXIT statement that would cause the termination of the innermost loop."
2156
+ also: ["OpenMP 6.0 §6.4.1, p.198"]
2157
+
2158
+ - id: cycle-loop-001
2159
+ lang: f90
2160
+ check: static
2161
+ status: provisional
2162
+ predicate: cycle_in_intervening_code
2163
+ example: "!$omp do collapse(2) / do i / do j / if (j > 2) cycle outer..."
2164
+ notes: "A CYCLE that applies to an associated loop other than the innermost (in intervening code, or branching out of the innermost loop body)."
2165
+ spec:
2166
+ 50:
2167
+ citation: "OpenMP 5.0 §2.9.2, p.108"
2168
+ text: "Only an iteration of the innermost associated loop may be curtailed by a CYCLE statement."
2169
+ 52:
2170
+ citation: "OpenMP 5.2 §4.4.1, p.87"
2171
+ text: "It must not contain loops, array expressions, CYCLE statements or EXIT statements."
2172
+ 60:
2173
+ citation: "OpenMP 6.0 §6.4.1, p.198"
2174
+ text: "A non-empty structured block sequence, referred to as intervening code. It must not contain: • loops; • CYCLE statements; • EXIT statements;"
2175
+
2176
+ - id: loopvar-loop-001
2177
+ check: static
2178
+ status: provisional
2179
+ predicate: loop_var_not_modified
2180
+ example: "!$omp parallel do / do i = 1, n / i = i + 1 / end do"
2181
+ notes: "An assignment statement to an associated iteration variable, or a DO loop on it, in the nest; modification through a call is not seen."
2182
+ spec:
2183
+ 52:
2184
+ citation: "OpenMP 5.2 §4.4.1, p.89"
2185
+ text: "It must not be modified during the execution of intervening-code or loop-body in the loop."
2186
+ 60:
2187
+ citation: "OpenMP 6.0 §6.4.1, p.200"
2188
+ text: "The loop-iteration variable var must not be modified during the execution of intervening-code or loop-body in the loop."
2189
+
2190
+ - id: loopvar-loop-002
2191
+ check: static
2192
+ status: provisional
2193
+ predicate: loop_var_not_threadprivate
2194
+ example: "!$omp threadprivate(i) / ... / !$omp parallel do / do i = 1, n"
2195
+ notes: ""
2196
+ spec:
2197
+ 50:
2198
+ citation: "OpenMP 5.0 §2.9.2, p.107"
2199
+ text: "The loop iteration variable may not appear in a threadprivate directive."
2200
+ 52:
2201
+ citation: "OpenMP 5.2 §4.4.1, p.91"
2202
+ text: "The loop iteration variable may not appear in a threadprivate directive."
2203
+ 60:
2204
+ citation: "OpenMP 6.0 §6.4.1, p.202"
2205
+ text: "The loop-iteration variable may not appear in a threadprivate directive."
2206
+
2207
+ - id: loopvar-loop-003
2208
+ lang: f90
2209
+ check: static
2210
+ status: provisional
2211
+ predicate: loop_var_integer
2212
+ example: "real :: x / !$omp parallel do / do x = 1, 4"
2213
+ notes: "Context requirement: a visible declaration of the DO variable."
2214
+ spec:
2215
+ 50:
2216
+ citation: "OpenMP 5.0 §2.9.2, p.108"
2217
+ text: "The do-loop iteration variable must be of type integer."
2218
+ also: ["OpenMP 5.0 §2.9.3.1, p.114"]
2219
+ 52:
2220
+ citation: "OpenMP 5.2 §4.4.1, p.89"
2221
+ text: "A scalar variable of integer type."
2222
+ 60:
2223
+ citation: "OpenMP 6.0 §6.4.1, p.200"
2224
+ text: "A scalar variable of integer type."
2225
+
2226
+ - id: nonrect-loop-001
2227
+ check: static
2228
+ status: provisional
2229
+ predicate: nonrect_same_outer_var
2230
+ example: "!$omp do collapse(3) / do i / do j / do k = i, j"
2231
+ notes: "Bounds that reference two outer associated loop variables."
2232
+ spec:
2233
+ 52:
2234
+ citation: "OpenMP 5.2 §4.4.1, p.91"
2235
+ text: "For a non-rectangular loop, if var-outer is referenced in lb and ub then they must both refer to the same iteration variable."
2236
+ 60:
2237
+ citation: "OpenMP 6.0 §6.4.1, p.202"
2238
+ text: "For a non-rectangular loop, if var-outer is referenced in lb and ub then they must both refer to the same loop-iteration variable."
2239
+
2240
+ - id: schedule-loop-001
2241
+ check: static
2242
+ status: provisional
2243
+ predicate: schedule_rectangular
2244
+ example: "!$omp do collapse(2) schedule(static) / do i / do j = i, n"
2245
+ notes: ""
2246
+ spec:
2247
+ 50:
2248
+ citation: "OpenMP 5.0 §2.9.2, p.107"
2249
+ text: "The schedule clause must not appear on the worksharing-loop directive if the associated loop(s) form a non-rectangular loop nest."
2250
+ 52:
2251
+ citation: "OpenMP 5.2 §11.5.3, p.253"
2252
+ text: "The schedule clause cannot be specified if any of the associated loops are non-rectangular."
2253
+ 60:
2254
+ citation: "OpenMP 6.0 §13.6.3, p.420"
2255
+ text: "The schedule clause cannot be specified if any of the collapsed loops is a non-rectangular loop."
2256
+
2257
+ - id: distschedule-loop-001
2258
+ check: static
2259
+ status: provisional
2260
+ predicate: dist_schedule_rectangular
2261
+ example: "!$omp distribute collapse(2) dist_schedule(static) / do i / do j = i, n"
2262
+ notes: ""
2263
+ spec:
2264
+ 50:
2265
+ citation: "OpenMP 5.0 §2.9.4.1, p.123"
2266
+ text: "The dist_schedule clause must not appear on the distribute directive if the associated loop(s) form a non-rectangular loop nest."
2267
+ 52:
2268
+ citation: "OpenMP 5.2 §11.6.1, p.256"
2269
+ text: "The dist_schedule clause cannot be specified if any of the associated loops are non-rectangular."
2270
+ 60:
2271
+ citation: "OpenMP 6.0 §13.7.1, p.423"
2272
+ text: "The dist_schedule clause cannot be specified if any of the collapsed loops is a non-rectangular loop."
2273
+
2274
+ - id: ordered-loop-001
2275
+ check: static
2276
+ status: provisional
2277
+ predicate: ordered_rectangular
2278
+ example: "!$omp do ordered(2) / do i / do j = i, n"
2279
+ notes: ""
2280
+ spec:
2281
+ 50:
2282
+ citation: "OpenMP 5.0 §2.9.2, p.107"
2283
+ text: "The ordered clause must not appear on the worksharing-loop directive if the associated loop(s) form a non-rectangular loop nest."
2284
+ 52:
2285
+ citation: "OpenMP 5.2 §4.4.4, p.94"
2286
+ text: "None of the associated loops may be non-rectangular loops."
2287
+ 60:
2288
+ citation: "OpenMP 6.0 §6.4.6, p.207"
2289
+ text: "None of the doacross-affected loops may be non-rectangular loops."
2290
+
2291
+ - id: linear-loop-001
2292
+ check: static
2293
+ status: provisional
2294
+ predicate: linear_rectangular
2295
+ example: "!$omp do collapse(2) linear(x) / do i / do j = i, n"
2296
+ notes: "6.0 only."
2297
+ spec:
2298
+ 60:
2299
+ citation: "OpenMP 6.0 §7.5.6, p.234"
2300
+ text: "None of the affected loops of a loop-nest-associated construct that has a linear clause may be a non-rectangular loop."
2301
+
2302
+ - id: induction-loop-001
2303
+ check: static
2304
+ status: provisional
2305
+ predicate: induction_rectangular
2306
+ example: "!$omp do collapse(2) induction(...) / do i / do j = i, n"
2307
+ notes: "6.0 only."
2308
+ spec:
2309
+ 60:
2310
+ citation: "OpenMP 6.0 §7.6.13, p.259"
2311
+ text: "None of the affected loops of a loop-nest-associated construct that has an induction clause may be a non-rectangular loop."
2312
+
2313
+ - id: ordered-loop-002
2314
+ check: static
2315
+ status: provisional
2316
+ predicate: ordered_n_within_depth
2317
+ example: "!$omp do ordered(2) / do i = 1, n / end do"
2318
+ notes: ""
2319
+ spec:
2320
+ 50:
2321
+ citation: "OpenMP 5.0 §2.9.2, p.104"
2322
+ text: "If the value of the parameter in the collapse or ordered clause is larger than the number of nested loops following the construct, the behavior is unspecified."
2323
+ 52:
2324
+ citation: "OpenMP 5.2 §4.4.4, p.94"
2325
+ text: "n must not evaluate to a value greater than the depth of the associated loop nest."
2326
+ 60:
2327
+ citation: "OpenMP 6.0 §6.4.6, p.207"
2328
+ text: "n must not evaluate to a value greater than the depth of the associated loop nest."
2329
+
2330
+ - id: ordered-loop-003
2331
+ check: static
2332
+ status: provisional
2333
+ predicate: ordered_n_ge_collapse
2334
+ example: "!$omp do collapse(2) ordered(1)"
2335
+ notes: ""
2336
+ spec:
2337
+ 50:
2338
+ citation: "OpenMP 5.0 §2.9.2, p.107"
2339
+ text: "If both the collapse and ordered clause with a parameter are specified, the parameter of the ordered clause must be greater than or equal to the parameter of the collapse clause."
2340
+ 52:
2341
+ citation: "OpenMP 5.2 §4.4.4, p.94"
2342
+ text: "If n is explicitly specified and the collapse clause is also specified for the ordered clause on the same construct, n must be greater than or equal to the n specified for the collapse clause."
2343
+ 60:
2344
+ citation: "OpenMP 6.0 §6.4.6, p.207"
2345
+ text: "If n is explicitly specified and the collapse clause is also specified for the ordered clause on the same construct, n must be greater than or equal to the n specified for the collapse clause."
2346
+
2347
+ - id: ordered-loop-004
2348
+ check: static
2349
+ status: provisional
2350
+ predicate: ordered_n_no_linear
2351
+ example: "!$omp do ordered(1) linear(x)"
2352
+ notes: "5.2 only."
2353
+ spec:
2354
+ 50:
2355
+ citation: "OpenMP 5.0 §2.9.2, p.108"
2356
+ text: "A linear clause or an ordered clause with a parameter can be specified on a worksharing-loop directive but not both."
2357
+ 52:
2358
+ citation: "OpenMP 5.2 §4.4.4, p.94"
2359
+ text: "If n is explicitly specified, a linear clause must not be specified on the same directive."
2360
+
2361
+ - id: ordered-loop-005
2362
+ check: static
2363
+ status: provisional
2364
+ predicate: ordered_n_perfectly_nested
2365
+ example: "!$omp do ordered(2) / do i / x = 1 / do j"
2366
+ notes: "5.2 only."
2367
+ spec:
2368
+ 50:
2369
+ citation: "OpenMP 5.0 §2.9.2, p.107"
2370
+ text: "If the ordered clause is present, all loops associated with the construct must be perfectly nested; that is there must be no intervening code between any two loops."
2371
+ 52:
2372
+ citation: "OpenMP 5.2 §4.4.4, p.94"
2373
+ text: "If n is explicitly specified, the associated loops must be perfectly nested."
2374
+
2375
+ - id: loop-clause-001
2376
+ lang: f90
2377
+ check: static
2378
+ status: provisional
2379
+ predicate: loop_do_concurrent_clauses
2380
+ example: "!$omp loop private(x) / do concurrent (i = 1:n)"
2381
+ notes: "6.0 only."
2382
+ spec:
2383
+ 60:
2384
+ citation: "OpenMP 6.0 §13.8, p.424"
2385
+ text: "If the collapsed loop is a DO CONCURRENT loop, neither the data-sharing attribute clauses nor the collapse clause may be specified."
2386
+
2387
+ - id: aligned-clause-001
2388
+ lang: f90
2389
+ check: static
2390
+ status: provisional
2391
+ predicate: aligned_pointer_or_allocatable
2392
+ example: "real :: a(10) / !$omp simd aligned(a)"
2393
+ notes: "5.2 only. Context requirement: a visible plain declaration."
2394
+ spec:
2395
+ 52:
2396
+ citation: "OpenMP 5.2 §5.11, p.170"
2397
+ text: "Each list item must have C_PTR or Cray pointer type or have the POINTER or ALLOCATABLE attribute. Cray pointer support has been deprecated."
2398
+
2399
+ - id: aligned-clause-002
2400
+ lang: f90
2401
+ check: static
2402
+ status: provisional
2403
+ predicate: aligned_array
2404
+ example: "real :: x / !$omp simd aligned(x)"
2405
+ notes: "6.0 only. Context requirement: a visible scalar declaration."
2406
+ spec:
2407
+ 60:
2408
+ citation: "OpenMP 6.0 §7.12, p.301"
2409
+ text: "Each list item must be an array."
2410
+
2411
+
2412
+ - id: arraysection-clause-001
2413
+ lang: f90
2414
+ check: static
2415
+ status: provisional
2416
+ predicate: section_stride_positive
2417
+ example: "!$omp target update to(a(1:n:0))"
2418
+ notes: "Integer literal strides only; every clause with a list."
2419
+ spec:
2420
+ 50:
2421
+ citation: "OpenMP 5.0 §2.1.5, p.46"
2422
+ text: "If a stride expression is specified, it must be positive."
2423
+ 52:
2424
+ citation: "OpenMP 5.2 §3.2.5, p.66"
2425
+ text: "If a stride expression is specified, it must be positive."
2426
+ 60:
2427
+ citation: "OpenMP 6.0 §5.2.5, p.168"
2428
+ text: "If a stride expression is specified, it must be positive."
2429
+
2430
+ - id: arraysection-clause-002
2431
+ lang: f90
2432
+ check: static
2433
+ status: provisional
2434
+ predicate: section_last_part_ref
2435
+ example: "!$omp target update to(s(1:n)%c)"
2436
+ notes: ""
2437
+ spec:
2438
+ 50:
2439
+ citation: "OpenMP 5.0 §2.1.5, p.46"
2440
+ text: "If a list item is an array section, the last part-ref of the list item must have a section subscript list."
2441
+ 52:
2442
+ citation: "OpenMP 5.2 §3.2.5, p.66"
2443
+ text: "If a list item is an array section, the last part-ref of the list item must have a section subscript list."
2444
+ 60:
2445
+ citation: "OpenMP 6.0 §5.2.5, p.168"
2446
+ text: "If a list item is an array section, the last part-ref of the list item must have a section subscript list."
2447
+
2448
+ - id: map-clause-001
2449
+ check: static
2450
+ status: provisional
2451
+ predicate: map_section_contiguous
2452
+ example: "!$omp target map(a(1:n:2))"
2453
+ notes: "Only an integer literal stride other than 1 is seen as non-contiguous (a section of a non-contiguous pointer is not)."
2454
+ spec:
2455
+ 50:
2456
+ citation: "OpenMP 5.0 §2.19.7.1, p.322"
2457
+ text: "If a list item is an array section, it must specify contiguous storage."
2458
+ 52:
2459
+ citation: "OpenMP 5.2 §5.8.3, p.156"
2460
+ text: "If a list item is an array section, it must specify contiguous storage."
2461
+ 60:
2462
+ citation: "OpenMP 6.0 §7.9.6, p.286"
2463
+ text: "If a list item is an array or an array section, it must specify contiguous storage."
2464
+
2465
+ - id: reduction-dsa-003
2466
+ check: static
2467
+ status: provisional
2468
+ predicate: task_reduction_item_needs_in_reduction
2469
+ example: "!$omp parallel reduction(+: x) / !$omp task / x = x + 1 / !$omp end task / !$omp end parallel"
2470
+ notes: "Lexical: the task body or clauses reference the item; accesses through calls are not seen."
2471
+ spec:
2472
+ 50:
2473
+ citation: "OpenMP 5.0 §2.19.5.4, p.302"
2474
+ text: "A list item that appears in a reduction clause of the innermost enclosing worksharing or parallel construct may not be accessed in an explicit task generated by a construct for which an in_reduction clause over the same list item does not appear."
2475
+ 52:
2476
+ citation: "OpenMP 5.2 §5.5.8, p.136"
2477
+ text: "A list item that appears in a reduction clause of the innermost enclosing worksharing or parallel construct must not be accessed in an explicit task generated by a construct for which an in_reduction clause over the same list item does not appear."
2478
+ 60:
2479
+ citation: "OpenMP 6.0 §7.6.10, p.254"
2480
+ text: "A list item that appears in a reduction clause of the innermost enclosing worksharing construct or parallel construct must not be accessed in an explicit task generated by a construct unless an in_reduction clause with the same list item appears on that construct."
2481
+
2482
+ - id: ordered-nesting-003
2483
+ check: static
2484
+ status: provisional
2485
+ predicate: ordered_simd_threads_in_worksharing_simd
2486
+ example: "!$omp simd / do ... / !$omp ordered simd threads / ... / !$omp end ordered / end do"
2487
+ notes: "5.2 only (6.0 states the simd and threads cases separately: ordered-nesting-001/002)."
2488
+ spec:
2489
+ 50:
2490
+ citation: "OpenMP 5.0 §2.20, p.328"
2491
+ text: "An ordered region corresponding to an ordered construct with both the simd and threads clauses must be closely nested inside a worksharing-loop SIMD region or closely nested inside a worksharing-loop and simd region."
2492
+ 52:
2493
+ citation: "OpenMP 5.2 §17.1, p.338"
2494
+ text: "An ordered region that corresponds to an ordered construct with both the simd and threads clauses must be closely nested inside a worksharing-loop SIMD region or closely nested inside a worksharing-loop and simd region."
2495
+
2496
+ - id: declarative-placement-001
2497
+ lang: f90
2498
+ check: static
2499
+ status: provisional
2500
+ predicate: declarative_after_use
2501
+ example: "!$omp requires unified_shared_memory / use m"
2502
+ notes: "5.2: the requires sentence (requires-placement-001 checks only its 'specification part' half); 6.0: every declarative directive."
2503
+ spec:
2504
+ 52:
2505
+ citation: "OpenMP 5.2 §8.2, p.211"
2506
+ text: "The requires directive must appear in the specification part of a program unit, after any USE statement, any IMPORT statement, and any IMPLICIT statement, unless the directive appears by referencing a module and each clause already appeared with the same arguments in the specification part of the program unit."
2507
+ 60:
2508
+ citation: "OpenMP 6.0 §5.1, p.156"
2509
+ text: "A declarative directive must be specified in the specification part after all USE, IMPORT and IMPLICIT statements."
2510
+
2511
+ - id: namedconst-clause-001
2512
+ lang: f90
2513
+ check: static
2514
+ status: provisional
2515
+ predicate: named_constant_list_item
2516
+ example: "integer, parameter :: k = 4 / !$omp parallel private(k)"
2517
+ notes: "5.2: a named constant is predetermined (the exceptions list allows it only in shared and firstprivate), checked on the data-sharing clauses; 6.0: any clause with a list."
2518
+ spec:
2519
+ 50:
2520
+ citation: "OpenMP 5.0 §2.19.1.1, p.271"
2521
+ text: "Variables with predetermined data-sharing attributes may not be listed in data-sharing attribute clauses, except for the cases listed below."
2522
+ 52:
2523
+ citation: "OpenMP 5.2 §5.1.1, p.98"
2524
+ text: "Variables with predetermined data-sharing attributes may not be listed in data-sharing attribute clauses, except for the cases listed below."
2525
+ 60:
2526
+ citation: "OpenMP 6.0 §5.2.1, p.164"
2527
+ text: "A named constant or a procedure pointer can appear as a list item only in clauses where it is explicitly allowed."
2528
+
2529
+
2530
+ # --- runtime (not decidable from the source) ---------------------------------------------
2531
+
2532
+ - id: distribute-exec-001
2533
+ check: runtime
2534
+ status: provisional
2535
+ predicate: null
2536
+ why: "The iteration space depends on loop bounds evaluated at run time in each team."
2537
+ spec:
2538
+ 50:
2539
+ citation: "OpenMP 5.0 §2.9.4.1, p.122"
2540
+ text: "The distribute construct inherits the restrictions of the worksharing-loop construct."
2541
+ also: ["OpenMP 5.0 §2.9.2, p.107"]
2542
+ 52:
2543
+ citation: "OpenMP 5.2 §11.6, p.255"
2544
+ text: "The logical iteration space of the loops associated with the distribute construct must be the same for all teams in the league."
2545
+ 60:
2546
+ citation: "OpenMP 6.0 §13.7, p.421"
2547
+ text: "The collapsed iteration space must the same for all teams in the league."
2548
+
2549
+ - id: distschedule-exec-001
2550
+ check: runtime
2551
+ status: provisional
2552
+ predicate: null
2553
+ why: "chunk_size is an expression whose value per team is known only at run time."
2554
+ spec:
2555
+ 50:
2556
+ citation: "OpenMP 5.0 §2.9.2, p.107"
2557
+ text: "The value of the chunk_size expression must be the same for all threads in the team."
2558
+ also: ["OpenMP 5.0 §2.9.4.1, p.122"]
2559
+ 52:
2560
+ citation: "OpenMP 5.2 §11.6.1, p.256"
2561
+ text: "The value of the chunk_size expression must be the same for all teams in the league."
2562
+ 60:
2563
+ citation: "OpenMP 6.0 §13.7.1, p.423"
2564
+ text: "The value of the chunk_size expression must be the same for all teams in the league."
2565
+
2566
+ - id: do-exec-001
2567
+ check: runtime
2568
+ status: provisional
2569
+ predicate: null
2570
+ why: "The iteration space depends on loop bounds evaluated at run time by each thread."
2571
+ spec:
2572
+ 50:
2573
+ citation: "OpenMP 5.0 §2.9.2, p.107"
2574
+ text: "The values of the loop control expressions of the loops associated with the worksharing-loop construct must be the same for all threads in the team."
2575
+ 52:
2576
+ citation: "OpenMP 5.2 §11.5, p.249"
2577
+ text: "The logical iteration space of the loops associated with the worksharing-loop construct must be the same for all threads in the team."
2578
+ 60:
2579
+ citation: "OpenMP 6.0 §13.6, p.415"
2580
+ text: "The collapsed iteration space must be the same for all threads in the team."
2581
+
2582
+ - id: loop-exec-001
2583
+ check: runtime
2584
+ status: provisional
2585
+ predicate: null
2586
+ why: "Which threads encounter a loop region depends on control flow at run time."
2587
+ spec:
2588
+ 50:
2589
+ citation: "OpenMP 5.0 §2.9.5, p.131"
2590
+ text: "If a loop region binds to a teams or parallel region, it must be encountered by all threads in the binding thread set or by none of them."
2591
+ 52:
2592
+ citation: "OpenMP 5.2 §11.7, p.258"
2593
+ text: "If a loop region binds to a teams or parallel region, it must be encountered by all threads in the binding thread set or by none of them."
2594
+ 60:
2595
+ citation: "OpenMP 6.0 §13.8, p.424"
2596
+ text: "If a loop region binds to a teams region or parallel region, it must be encountered by all threads in the binding thread set or by none of them."
2597
+
2598
+ - id: device-exec-001
2599
+ check: runtime
2600
+ status: provisional
2601
+ predicate: null
2602
+ why: "The device number is a run-time value and the set of conforming device numbers is known only at run time."
2603
+ spec:
2604
+ 50:
2605
+ citation: "OpenMP 5.0 §2.12.5, p.174"
2606
+ text: "The device clause expression must evaluate to a non-negative integer value less than the value of omp_get_num_devices() or to the value of omp_get_initial_device()."
2607
+ 52:
2608
+ citation: "OpenMP 5.2 §13.2, p.276"
2609
+ text: "If the device_num device-modifier is specified and target-offload-var is not mandatory, device-description must evaluate to a conforming device number."
2610
+ 60:
2611
+ citation: "OpenMP 6.0 §15.2, p.452"
2612
+ text: "If the device_num device-modifier is specified and target-offload-var is not mandatory, device-description must evaluate to a conforming device number."
2613
+
2614
+ - id: map-exec-001
2615
+ check: runtime
2616
+ status: provisional
2617
+ predicate: null
2618
+ why: "What is present in the device data environment when the construct is encountered depends on earlier executions."
2619
+ spec:
2620
+ 50:
2621
+ citation: "OpenMP 5.0 §2.19.7.1, p.322"
2622
+ text: "If any part of the original storage of a list item with an explicit data-mapping attribute has corresponding storage in the device data environment prior to a task encountering the construct associated with the map clause, all of the original storage must have corresponding storage in the device data environment prior to the task encountering the construct."
2623
+ 52:
2624
+ citation: "OpenMP 5.2 §5.8.3, p.156"
2625
+ text: "If any part of the original storage of a list item with an explicit data-mapping attribute has corresponding storage in the device data environment prior to a task encountering the construct associated with the map clause, all of the original storage must have corresponding storage in the device data environment prior to the task encountering the construct."
2626
+ 60:
2627
+ citation: "OpenMP 6.0 §7.9.6, p.286"
2628
+ text: "If any part of the original storage of a list item that is explicitly mapped by a map clause has corresponding storage in the device data environment prior to a task encountering the construct associated with the map clause, all of the original storage must have corresponding storage in the device data environment prior to the task encountering the construct."
2629
+
2630
+ - id: target-exec-001
2631
+ lang: f90
2632
+ check: runtime
2633
+ status: provisional
2634
+ predicate: null
2635
+ why: "Allocation status on entry to and exit from the region is a run-time property."
2636
+ spec:
2637
+ 50:
2638
+ citation: "OpenMP 5.0 §2.19.7.1, p.323"
2639
+ text: "If the allocation status of a list item or any subobject of the list item with the ALLOCATABLE attribute is unallocated upon entry to a target region, the list item or any subobject of the corresponding list item must be unallocated upon exit from the region."
2640
+ 52:
2641
+ citation: "OpenMP 5.2 §13.8, p.287"
2642
+ text: "If the allocation status of a mapped variable that has the ALLOCATABLE attribute is unallocated on entry to a target region, the allocation status of the corresponding variable in the device data environment must be unallocated upon exiting the region."
2643
+ 60:
2644
+ citation: "OpenMP 6.0 §15.8, p.464"
2645
+ text: "If the allocation status of a mapped variable or a list item that appears in a has_device_addr clause that has the ALLOCATABLE attribute is unallocated on entry to a target region, the allocation status of the corresponding variable in the device data environment must be unallocated upon exiting the region."
2646
+
2647
+ # --- C: C/C++ restriction sentences, lang: c -------------------------------
2648
+ # Predicates in offload/engine/c_rules.py; facts from the C scanner
2649
+ # (offload/engine/c_program.py). Unit cases: tests/engine/test_c.py (C_CASES).
2650
+
2651
+ - id: requires-placement-005
2652
+ lang: c
2653
+ check: static
2654
+ status: provisional
2655
+ predicate: c_requires_at_file_scope
2656
+ example: "int main(void) { #pragma omp requires unified_shared_memory ... }"
2657
+ notes: "The C counterpart of requires-placement-001 (Fortran: the specification part of a program unit). Isolation: move a requires directive into main."
2658
+ spec:
2659
+ 50:
2660
+ citation: "OpenMP 5.0 §2.4, p.63"
2661
+ text: "The requires directive may only appear at file scope."
2662
+ 52:
2663
+ citation: "OpenMP 5.2 §8.2, p.211"
2664
+ text: "The requires directive may only appear at file scope."
2665
+ 60:
2666
+ citation: "OpenMP 6.0 §10.5, p.355"
2667
+ text: "The requires directive must only appear at file scope."
2668
+
2669
+ - id: directive-placement-001
2670
+ lang: c
2671
+ check: static
2672
+ status: provisional
2673
+ predicate: c_directive_substatement
2674
+ example: "if (c) #pragma omp target update to(a)"
2675
+ notes: "Stand-alone (target update, target enter/exit data, taskwait, ...) and declarative directives as the substatement of if/else/switch/for/while/do or after a label (C scanner fact substatement). Isolation: drop the braces around a target update that is the only statement of an if."
2676
+ spec:
2677
+ 50:
2678
+ citation: "OpenMP 5.0 §2.1.3, p.43"
2679
+ text: "A stand-alone directive may not be used in place of the statement following an if, while, do, switch, or label."
2680
+ 52:
2681
+ citation: "OpenMP 5.2 §3.1, p.54"
2682
+ text: "Neither a stand-alone directive nor a declarative directive may be used in place of a substatement in a selection statement or iteration statement, or in place of the statement that follows a label."
2683
+ 60:
2684
+ citation: "OpenMP 6.0 §5.1, p.156"
2685
+ text: "Neither a stand-alone directive nor a declarative directive may be used in place of a substatement in a selection statement or iteration statement, or in place of the statement that follows a label."
2686
+
2687
+ - id: canonical-loop-001
2688
+ lang: c
2689
+ check: static
2690
+ status: provisional
2691
+ predicate: c_loop_increment_direction_var_left
2692
+ example: "#pragma omp parallel for / for (i = 0; i < n; i--)"
2693
+ notes: "Also the second sentence of the bullet (var relational-op b with > or >=: var must decrease). Checked when the step is an integer literal. Isolation: decrement in a for loop whose test is i <= n."
2694
+ spec:
2695
+ 50:
2696
+ citation: "OpenMP 5.0 §2.9.1, p.100"
2697
+ text: "If test-expr is of the form var relational-op b and relational-op is < or <= then incr-expr must cause var to increase on each iteration of the loop."
2698
+ 52:
2699
+ citation: "OpenMP 5.2 §4.4.1, p.90"
2700
+ text: "If test-expr is of the form var relational-op b and relational-op is < or <= then incr-expr must cause var to increase on each iteration of the loop."
2701
+ 60:
2702
+ citation: "OpenMP 6.0 §6.4.1, p.201"
2703
+ text: "If test-expr is of the form var relational-op b and relational-op is < or <= then incr-expr must cause var to increase on each iteration of the loop."
2704
+
2705
+ - id: canonical-loop-002
2706
+ lang: c
2707
+ check: static
2708
+ status: provisional
2709
+ predicate: c_loop_increment_direction_ub_left
2710
+ example: "#pragma omp parallel for / for (i = 0; n > i; i--)"
2711
+ notes: "Also the second sentence of the bullet (ub relational-op var with > or >=: var must increase). Checked when the step is an integer literal."
2712
+ spec:
2713
+ 50:
2714
+ citation: "OpenMP 5.0 §2.9.1, p.100"
2715
+ text: "If test-expr is of the form b relational-op var and relational-op is < or <= then incr-expr must cause var to decrease on each iteration of the loop."
2716
+ 52:
2717
+ citation: "OpenMP 5.2 §4.4.1, p.90"
2718
+ text: "If test-expr is of the form ub relational-op var and relational-op is < or <= then incr-expr must cause var to decrease on each iteration of the loop."
2719
+ 60:
2720
+ citation: "OpenMP 6.0 §6.4.1, p.201"
2721
+ text: "If test-expr is of the form ub relational-op var and relational-op is < or <= then incr-expr must cause var to decrease on each iteration of the loop."
2722
+
2723
+ - id: canonical-loop-003
2724
+ lang: c
2725
+ check: static
2726
+ status: provisional
2727
+ predicate: c_loop_ne_unit_step
2728
+ example: "#pragma omp parallel for / for (i = 0; i != n; i += 2)"
2729
+ notes: "A step that is not an integer literal is flagged too (its value is not known to be +-1)."
2730
+ spec:
2731
+ 50:
2732
+ citation: "OpenMP 5.0 §2.9.1, p.100"
2733
+ text: "If relational-op is != and incr-expr is of the form that has incr then incr must be a constant expression and evaluate to -1 or 1."
2734
+ 52:
2735
+ citation: "OpenMP 5.2 §4.4.1, p.91"
2736
+ text: "If relational-op is != then incr-expr must cause var to always increase by 1 or always decrease by 1 and the increment must be a constant expression."
2737
+ 60:
2738
+ citation: "OpenMP 6.0 §6.4.1, p.201"
2739
+ text: "If relational-op is != then incr-expr must cause var to always increase by 1 or always decrease by 1 and the increment must be a constant expression."
2740
+
2741
+ - id: loopvar-loop-004
2742
+ lang: c
2743
+ check: static
2744
+ status: provisional
2745
+ predicate: c_loop_var_integer_or_pointer
2746
+ example: "#pragma omp parallel for / for (double x = 0; x < 1; x++)"
2747
+ notes: "The C counterpart of loopvar-loop-003 (Fortran: a scalar variable of integer type). var is one of: a variable of a signed or unsigned integer type; (C) a variable of a pointer type (also cited text). _Bool is an unsigned integer type (C11 §6.2.5)."
2748
+ spec:
2749
+ 50:
2750
+ citation: "OpenMP 5.0 §2.9.1, p.96"
2751
+ text: "A variable of a signed or unsigned integer type."
2752
+ 52:
2753
+ citation: "OpenMP 5.2 §4.4.1, p.88"
2754
+ text: "A variable of a signed or unsigned integer type."
2755
+ 60:
2756
+ citation: "OpenMP 6.0 §6.4.1, p.199"
2757
+ text: "A variable of a signed or unsigned integer type."
2758
+
2759
+ - id: intervening-loop-001
2760
+ lang: c
2761
+ check: static
2762
+ status: provisional
2763
+ predicate: c_intervening_no_iteration_or_jump
2764
+ example: "#pragma omp parallel for collapse(2) / for (i...) { while (0) {} for (j...) ... }"
2765
+ notes: "The C counterpart of cycle-loop-001 (Fortran). Iteration statements in the intervening code of a collapsed nest, and continue/break statements that apply to an associated loop other than the innermost one."
2766
+ spec:
2767
+ 52:
2768
+ citation: "OpenMP 5.2 §4.4.1, p.87"
2769
+ text: "It must not contain iteration statements, continue statements or break statements that apply to the enclosing loop."
2770
+ 60:
2771
+ citation: "OpenMP 6.0 §6.4.1, p.198"
2772
+ text: "It must not contain iteration statements, continue statements or break statements that apply to the enclosing loop."
2773
+
2774
+ - id: finalbody-loop-001
2775
+ lang: c
2776
+ check: static
2777
+ status: provisional
2778
+ predicate: c_final_body_no_break
2779
+ example: "#pragma omp parallel for / for (i...) { if (i == 3) break; }"
2780
+ notes: "The C counterpart of exit-loop-001 (Fortran EXIT). A break inside a switch or an inner loop applies to that statement, not to the associated loop."
2781
+ spec:
2782
+ 52:
2783
+ citation: "OpenMP 5.2 §4.4.1, p.91"
2784
+ text: "final-loop-body must not contain any break statement that would cause the termination of the innermost loop."
2785
+ 60:
2786
+ citation: "OpenMP 6.0 §6.4.1, p.201"
2787
+ text: "final-loop-body must not contain any break statement that would cause the termination of the innermost loop."
2788
+
2789
+ - id: linear-clause-005
2790
+ lang: c
2791
+ check: static
2792
+ status: provisional
2793
+ predicate: c_linear_integral_or_pointer
2794
+ example: "double x; #pragma omp simd linear(x)"
2795
+ notes: "The C counterpart of linear-clause-004 (Fortran: integer). 'If specified, linear-modifier must be val' (C) is enforced by the C form of the clause grammar."
2796
+ spec:
2797
+ 50:
2798
+ citation: "OpenMP 5.0 §2.19.4.6, p.292"
2799
+ text: "A list-item that appears in a linear clause must be of integral or pointer type."
2800
+ 52:
2801
+ citation: "OpenMP 5.2 §5.4.6, p.119"
2802
+ text: "All list items must be of integral or pointer type."
2803
+ 60:
2804
+ citation: "OpenMP 6.0 §7.5.6, p.234"
2805
+ text: "All list items must be of integral or pointer type."
2806
+
2807
+ - id: aligned-clause-003
2808
+ lang: c
2809
+ check: static
2810
+ status: provisional
2811
+ predicate: c_aligned_array_or_pointer
2812
+ example: "int x; #pragma omp simd aligned(x: 64)"
2813
+ notes: "The C counterpart of aligned-clause-001/002 (Fortran)."
2814
+ spec:
2815
+ 50:
2816
+ citation: "OpenMP 5.0 §2.9.3.1, p.113"
2817
+ text: "The type of list items appearing in the aligned clause must be array or pointer."
2818
+ 52:
2819
+ citation: "OpenMP 5.2 §5.11, p.169"
2820
+ text: "The type of list items must be array or pointer."
2821
+ 60:
2822
+ citation: "OpenMP 6.0 §7.12, p.300"
2823
+ text: "The type of each list item must be an array or pointer type."
2824
+
2825
+ - id: isdeviceptr-clause-001
2826
+ lang: c
2827
+ check: static
2828
+ status: provisional
2829
+ predicate: c_is_device_ptr_pointer_or_array
2830
+ example: "int x; #pragma omp target is_device_ptr(x)"
2831
+ notes: "6.0 has no type restriction on is_device_ptr list items (each must be a valid device pointer, a run-time property)."
2832
+ spec:
2833
+ 50:
2834
+ citation: "OpenMP 5.0 §2.12.5, p.175"
2835
+ text: "A list item that appears in an is_device_ptr clause must have a type of pointer or array."
2836
+ 52:
2837
+ citation: "OpenMP 5.2 §5.4.7, p.120"
2838
+ text: "Each list item must have a type of pointer or array."
2839
+
2840
+ - id: reduction-clause-007
2841
+ lang: c
2842
+ check: static
2843
+ status: provisional
2844
+ predicate: c_reduction_minmax_arithmetic
2845
+ example: "int *p; #pragma omp parallel for reduction(max: p)"
2846
+ notes: "_Bool is an allowed type (the C _Bool item of the && and || reductions of the slice programs). Checked for pointer, structure and union declarations."
2847
+ spec:
2848
+ 50:
2849
+ citation: "OpenMP 5.0 §2.19.5.1, p.298"
2850
+ text: "For a max or min reduction in C, the type of the list item must be an allowed arithmetic data type: char, int, float, double, or _Bool, possibly modified with long, short, signed, or unsigned."
2851
+ 52:
2852
+ citation: "OpenMP 5.2 §5.5.5, p.132"
2853
+ text: "For a max or min reduction in C, the type of the list item must be an allowed arithmetic data type: char, int, float, double, or _Bool, possibly modified with long, short, signed, or unsigned."
2854
+ 60:
2855
+ citation: "OpenMP 6.0 §7.6.6, p.250"
2856
+ text: "For a max or min reduction, the type of the list item must be an allowed arithmetic data type: char, int, float, double, or _Bool, possibly modified with long, short, signed, or unsigned."
2857
+
2858
+ - id: reduction-clause-008
2859
+ lang: c
2860
+ check: static
2861
+ status: provisional
2862
+ predicate: c_reduction_not_const
2863
+ example: "const int s = 0; #pragma omp parallel for reduction(+: s)"
2864
+ spec:
2865
+ 50:
2866
+ citation: "OpenMP 5.0 §2.19.5.1, p.298"
2867
+ text: "A list item that appears in a reduction clause must not be const-qualified."
2868
+ 52:
2869
+ citation: "OpenMP 5.2 §5.5.5, p.132"
2870
+ text: "A list item that appears in a reduction clause must not be const-qualified."
2871
+ 60:
2872
+ citation: "OpenMP 6.0 §7.6.5, p.248"
2873
+ text: "A list item that appears in a reduction clause or an induction clause must not be const-qualified."
2874
+
2875
+ - id: privatization-dsa-001
2876
+ lang: c
2877
+ check: static
2878
+ status: provisional
2879
+ predicate: c_privatized_not_const
2880
+ example: "const int t = 1; #pragma omp parallel private(t)"
2881
+ notes: "The class-type exception is C++ only. Clauses checked: private, lastprivate, linear (firstprivate is exempt; the reduction clauses privatize too but have their own rule, reduction-clause-008, so a const reduction item fires that one only)."
2882
+ spec:
2883
+ 50:
2884
+ citation: "OpenMP 5.0 §2.19.3, p.281"
2885
+ text: "A variable that is privatized must not have a const-qualified type unless it is of class type with a mutable member. This restriction does not apply to the firstprivate clause."
2886
+ 52:
2887
+ citation: "OpenMP 5.2 §5.3, p.108"
2888
+ text: "A variable that is privatized must not have a const-qualified type unless it is of class type with a mutable member. This restriction does not apply to the firstprivate clause."
2889
+ 60:
2890
+ citation: "OpenMP 6.0 §7.4, p.222"
2891
+ text: "A variable that is privatized must not have a const-qualified type unless it is of class type with a mutable member. This restriction does not apply to the firstprivate clause."
2892
+
2893
+ - id: map-clause-003
2894
+ lang: c
2895
+ check: static
2896
+ status: provisional
2897
+ predicate: c_map_no_bitfield
2898
+ example: "struct s { int f : 3; } v; #pragma omp target map(tofrom: v.f)"
2899
+ spec:
2900
+ 50:
2901
+ citation: "OpenMP 5.0 §2.19.7.1, p.323"
2902
+ text: "A bit-field cannot appear in a map clause."
2903
+ 52:
2904
+ citation: "OpenMP 5.2 §5.8.3, p.157"
2905
+ text: "A bit-field cannot appear in a map clause."
2906
+ 60:
2907
+ citation: "OpenMP 6.0 §7.9.6, p.287"
2908
+ text: "A bit-field cannot appear in a map clause."
2909
+
2910
+ - id: map-clause-004
2911
+ lang: c
2912
+ check: static
2913
+ status: provisional
2914
+ predicate: c_map_no_union_member
2915
+ example: "union u { int i; float f; } v; #pragma omp target map(tofrom: v.i)"
2916
+ spec:
2917
+ 50:
2918
+ citation: "OpenMP 5.0 §2.19.7.1, p.323"
2919
+ text: "A list item cannot be a variable that is a member of a structure with a union type."
2920
+ 52:
2921
+ citation: "OpenMP 5.2 §5.8.3, p.157"
2922
+ text: "A list item cannot be a variable that is a member of a structure of a union type."
2923
+ 60:
2924
+ citation: "OpenMP 6.0 §7.9.6, p.287"
2925
+ text: "A list item cannot be a variable that is a member of a structure of a union type."
2926
+
2927
+ - id: depend-clause-005
2928
+ lang: c
2929
+ check: static
2930
+ status: provisional
2931
+ predicate: c_depend_no_bitfield
2932
+ example: "struct s { int f : 3; } v; #pragma omp task depend(out: v.f)"
2933
+ spec:
2934
+ 50:
2935
+ citation: "OpenMP 5.0 §2.17.11, p.259"
2936
+ text: "A bit-field cannot appear in a depend clause."
2937
+ 52:
2938
+ citation: "OpenMP 5.2 §15.9.5, p.325"
2939
+ text: "A bit-field cannot appear in a depend clause."
2940
+ 60:
2941
+ citation: "OpenMP 6.0 §17.9.5, p.510"
2942
+ text: "A bit-field cannot appear in a depend clause."
2943
+
2944
+ - id: declaremapper-clause-006
2945
+ lang: c
2946
+ check: static
2947
+ status: provisional
2948
+ predicate: c_declare_mapper_struct_or_union
2949
+ example: "#pragma omp declare mapper(int v) map(v)"
2950
+ notes: "The C counterpart of declaremapper-clause-004 (Fortran: not an intrinsic or abstract type). A typedef name defined in the source is resolved (a typedef'd struct is not flagged; a typedef of a scalar or pointer type is); a typedef name the source does not define is not flagged."
2951
+ spec:
2952
+ 50:
2953
+ citation: "OpenMP 5.0 §2.19.7.3, p.327"
2954
+ text: "The type must be of struct, union or class type in C and C++ or a non-intrinsic type in Fortran."
2955
+ 52:
2956
+ citation: "OpenMP 5.2 §5.8.8, p.164"
2957
+ text: "type must be a struct or union type."
2958
+ 60:
2959
+ citation: "OpenMP 6.0 §7.9.10, p.294"
2960
+ text: "type must be a struct or union type."
2961
+
2962
+ - id: arraysection-clause-003
2963
+ lang: c
2964
+ check: static
2965
+ status: provisional
2966
+ predicate: c_section_base_array_or_pointer
2967
+ example: "int x; #pragma omp target map(to: x[0:4])"
2968
+ spec:
2969
+ 50:
2970
+ citation: "OpenMP 5.0 §2.1.5, p.46"
2971
+ text: "The base expression of an array section must have an array or pointer type."
2972
+ 52:
2973
+ citation: "OpenMP 5.2 §3.2.5, p.66"
2974
+ text: "The base expression of an array section must have an array or pointer type."
2975
+ 60:
2976
+ citation: "OpenMP 6.0 §5.2.5, p.168"
2977
+ text: "The array base of an array section must have an array or pointer type."
2978
+
2979
+ - id: arraysection-clause-004
2980
+ lang: c
2981
+ check: static
2982
+ status: provisional
2983
+ predicate: c_section_stride_positive
2984
+ example: "#pragma omp target update to(a[0:4:0])"
2985
+ notes: "The C counterpart of arraysection-clause-001 (Fortran). The sentence is in the C/C++ syntax text of the section, not in its Restrictions."
2986
+ spec:
2987
+ 50:
2988
+ citation: "OpenMP 5.0 §2.1.5, p.44"
2989
+ text: "The stride must evaluate to a positive integer."
2990
+ 52:
2991
+ citation: "OpenMP 5.2 §3.2.5, p.64"
2992
+ text: "The stride must evaluate to a positive integer."
2993
+ 60:
2994
+ citation: "OpenMP 6.0 §5.2.5, p.166"
2995
+ text: "The stride must evaluate to a positive integer."
2996
+
2997
+ - id: arraysection-clause-005
2998
+ lang: c
2999
+ check: static
3000
+ status: provisional
3001
+ predicate: c_section_length_nonnegative
3002
+ example: "#pragma omp target map(to: a[0:-1])"
3003
+ notes: "The sentence is in the C/C++ syntax text of the section."
3004
+ spec:
3005
+ 50:
3006
+ citation: "OpenMP 5.0 §2.1.5, p.44"
3007
+ text: "The length must evaluate to a non-negative integer."
3008
+ 52:
3009
+ citation: "OpenMP 5.2 §3.2.5, p.64"
3010
+ text: "The length must evaluate to a non-negative integer."
3011
+ 60:
3012
+ citation: "OpenMP 6.0 §5.2.5, p.166"
3013
+ text: "The length must evaluate to a non-negative integer."
3014
+
3015
+ - id: default-dsa-002
3016
+ lang: c
3017
+ check: static
3018
+ status: provisional
3019
+ predicate: c_default_private_static_listed
3020
+ example: "int g; ... #pragma omp parallel default(firstprivate) { g = 1; }"
3021
+ notes: "File-scope variables (static storage duration) referenced in the construct's statements; references in nested directives' clauses are not counted (lenient)."
3022
+ spec:
3023
+ 52:
3024
+ citation: "OpenMP 5.2 §5.4.1, p.109"
3025
+ text: "If data-sharing-attribute is firstprivate or private, each variable with static storage duration that is declared in a namespace or global scope, is referenced in the construct, and does not have a predetermined data-sharing attribute must have its data-sharing attribute explicitly determined by being listed in a data-sharing attribute clause."
3026
+ 60:
3027
+ citation: "OpenMP 6.0 §7.5.1, p.224"
3028
+ text: "If data-sharing-attribute is firstprivate or private, each variable with static storage duration that is declared in a namespace or global scope, is referenced in the construct, and does not have a predetermined data-sharing attribute must have an explicitly determined data-sharing attribute."
3029
+
3030
+ - id: declaretarget-placement-004
3031
+ lang: c
3032
+ check: static
3033
+ status: provisional
3034
+ predicate: c_declare_target_same_scope
3035
+ example: "int g; int main(void) { #pragma omp declare target(g) ... }"
3036
+ notes: "6.0 only (5.2 states the scope rule for Fortran only, declaretarget-placement-002)."
3037
+ spec:
3038
+ 60:
3039
+ citation: "OpenMP 6.0 §9.9.1, p.347"
3040
+ text: "If the directive is not a declaration-associated directive, it must appear at the same scope as the declaration of every list item in its extended-list or in its data-environment attribute clauses."
3041
+
3042
+ - id: declarereduction-clause-001
3043
+ lang: c
3044
+ check: static
3045
+ status: provisional
3046
+ predicate: c_declare_reduction_type
3047
+ example: "#pragma omp declare reduction(r: const int: omp_out += omp_in)"
3048
+ notes: "Qualified (const, volatile, restrict), array and function type names; a reference type is C++ only."
3049
+ spec:
3050
+ 50:
3051
+ citation: "OpenMP 5.0 §2.19.5.7, p.308"
3052
+ text: "A type name in a declare reduction directive cannot be a function type, an array type, a reference type, or a type qualified with const, volatile or restrict."
3053
+ 52:
3054
+ citation: "OpenMP 5.2 §5.5.11, p.140"
3055
+ text: "A type name in a declare reduction directive cannot be a function type, an array type, a reference type, or a type qualified with const, volatile or restrict."
3056
+ 60:
3057
+ citation: "OpenMP 6.0 §7.6.14, p.261"
3058
+ text: "A type name in a declare_reduction directive must not be a function type, an array type, a reference type, or a type qualified with const, volatile or restrict."
3059
+
3060
+
3061
+ - id: map-clause-005
3062
+ check: static
3063
+ status: provisional
3064
+ predicate: map_iterator_shared_containing_array
3065
+ example: "!$omp target map(iterator(k = 1:2), tofrom: a(k))"
3066
+ notes: "Decided statically when the iterator range has integer literal bounds giving two or more values and the iterator appears only in the subscript applied to a named variable (every instance then has that variable as containing array or base pointer); other forms (computed bounds, the iterator in a base pointer) are not judged. Not generated as a catalog variant (gen.NOT_GENERATABLE): added to judge corpus tests (omp_vv test_target_map_iterators.c)."
3067
+ spec:
3068
+ 52:
3069
+ citation: "OpenMP 5.2 §5.8.3, p.156"
3070
+ text: "If an expression that is used to form a list item in a map clause contains an iterator identifier, the list item instances that would result from different values of the iterator must not have the same containing array and must not have base pointers that share original storage."
3071
+ 60:
3072
+ citation: "OpenMP 6.0 §7.9.6, p.286"
3073
+ text: "If an expression that is used to form a list item in a map clause contains an iterator identifier that is defined by an iterator modifier, the list item instances that would result from different values of the iterator must not have the same containing array and must not have base pointers that share original storage."
3074
+
3075
+ # --- fortran-oop ------------------------------
3076
+
3077
+ - id: typebound-declaretarget-001
3078
+ lang: f90
3079
+ check: static
3080
+ status: provisional
3081
+ predicate: type_bound_declare_target
3082
+ example: "type t ... procedure :: get => t_get ... (t_get without declare target) ... !$omp target / r = x%get() / !$omp end target"
3083
+ notes: "Accessed: a binding reference (call x%b, x%b(...)), the specifics of a generic binding, a defined assignment or operator of the type, a final subroutine of a local or INTENT(OUT) object of a device procedure, and the defined assignment (firstprivate) and final subroutines (private, firstprivate) of a target construct's list items. A polymorphic object may invoke every override in an extension. In the region: target constructs and the procedures that run on the device (declare target, referenced from the region, reached as a type-bound procedure). A binding whose procedure is not defined in the source is not judged. The sentence is part of the definition of a mappable type: a list item must have a mappable type (5.2 §5.8.3 p.156). Conservative (it may refuse a conforming program; none in the corpus): a CLASS object needs every override in every extension the source defines, used on the device or not; a derived-type dummy declared without INTENT is read as a finalized local; a procedure also referenced by name in the region (implicitly declare target, 5.2 §13.8 p.285) is still refused when it is accessed as a binding."
3084
+ spec:
3085
+ 50:
3086
+ citation: "OpenMP 5.0 §1.2.6, p.16"
3087
+ text: "All type-bound procedures accessed in any target region must appear in a declare target directive."
3088
+ 52:
3089
+ citation: "OpenMP 5.2 §1.2.6, p.19"
3090
+ text: "All type-bound procedures accessed in any target region must appear in a declare target directive."
3091
+ also: ["OpenMP 5.2 §5.8.3, p.156"]
3092
+ 60:
3093
+ citation: "OpenMP 6.0 §2, p.69"
3094
+ text: "All type-bound procedures accessed in any target region must appear in a declare_target directive."
3095
+ also: ["OpenMP 6.0 §7.9.6, p.287"]
3096
+
3097
+ - id: typename-clause-001
3098
+ lang: f90
3099
+ check: static
3100
+ status: provisional
3101
+ predicate: type_name_list_item
3102
+ example: "!$omp declare reduction(r: class(*): omp_out = omp_in)"
3103
+ notes: "Type-name lists: declare reduction (the abstract type of a declare mapper is declaremapper-clause-004's). Abstract: a type defined in the source with the ABSTRACT attribute."
3104
+ spec:
3105
+ 50:
3106
+ citation: "OpenMP 5.0 §2.19.5.7, p.305"
3107
+ text: "type-list is a list of type specifiers that must not be CLASS(*) and abstract type"
3108
+ 52:
3109
+ citation: "OpenMP 5.2 §3.2.1, p.61"
3110
+ text: "A type-name list item is a type specifier that must not be CLASS(*) or an abstract type."
3111
+ 60:
3112
+ citation: "OpenMP 6.0 §5.2.1, p.164"
3113
+ text: "A type-name list item must not specify an abstract type or be either CLASS(*) or TYPE(*)."
3114
+
3115
+ - id: declaretarget-clause-006
3116
+ lang: f90
3117
+ check: static
3118
+ status: provisional
3119
+ predicate: declare_target_procedure_name
3120
+ example: "interface gen / module procedure f1 / end interface gen / !$omp declare target enter(gen)"
3121
+ notes: "Generic interface names (interface NAME blocks) and procedure pointers (procedure(...), pointer :: p) of the source; entry and statement function names are not judged."
3122
+ spec:
3123
+ 50:
3124
+ citation: "OpenMP 5.0 §2.12.7, p.184"
3125
+ text: "If a list item is a procedure name, it must not be a generic name, procedure pointer or entry name."
3126
+ 52:
3127
+ citation: "OpenMP 5.2 §7.8.1, p.206"
3128
+ text: "If a list item is a procedure name, it must not be a generic name, procedure pointer, entry name, or statement function name."
3129
+ 60:
3130
+ citation: "OpenMP 6.0 §9.9.1, p.348"
3131
+ text: "If a list item is a procedure name, it must not be a generic name, procedure pointer, entry name, or statement function name."