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
offload/engine/gate.py ADDED
@@ -0,0 +1,1013 @@
1
+ """The reproduction gate: a failure counts only after the tools reproduce it.
2
+
3
+ Each failing campaign row is rerun in four environments (``environments``):
4
+ (a) its original build directory and node, (b) a differently named build
5
+ directory, (c) the path of (a) on another node or GPU, (d) a second run in
6
+ (a). ``verdict(row, reruns)`` returns ``not_reproduced``, ``nondeterministic``
7
+ (an environment disagrees with itself), ``confirmed`` (every valid rerun
8
+ matches the row) or ``environment`` (the environments differ). ``unchecked``
9
+ marks a failure not rerun, ``illegal`` a program violating a rule. A
10
+ ``harness_error`` rerun or one killed by signal 9 is not valid.
11
+ ``plan`` fits the reruns into a GPU-second budget (``cost_s``): one failure
12
+ per new compile-time signature, then run-time failures round-robin, then up
13
+ to ``per_signature`` more. ``inherit`` copies a signature's verdict to its
14
+ unrerun rows. Campaign kinds are in ``KINDS``. The gate adds verdicts and
15
+ never deletes rows; ``counts_as_failure`` tells which count."""
16
+ from __future__ import annotations
17
+
18
+ import hashlib
19
+ import json
20
+ import os
21
+ import re
22
+ from collections import defaultdict
23
+ from pathlib import Path
24
+
25
+ from offload.engine.root import ROOT # noqa: E402
26
+ RESULTS = ROOT / "results" / "gate"
27
+ VERDICTS = ("confirmed", "environment", "nondeterministic",
28
+ "not_reproduced", "unchecked", "illegal", "not_a_failure")
29
+ REVIEW = ("environment", "nondeterministic", "not_reproduced")
30
+ # most doubtful first: the verdict a signature's unsampled rows inherit
31
+ WORST_FIRST = ("nondeterministic", "environment", "not_reproduced",
32
+ "confirmed")
33
+ COMPILE_CLASSES = ("rejected", "ice", "accepted_ignored")
34
+ ENVS = ("a", "b", "c", "d")
35
+ PASSING = ("correct_on_device", "unobservable")
36
+ NOT_EVIDENCE = ("harness_error", "skipped")
37
+ # a capacity limit the runtime reports (offload.engine.harness.CAPACITY): a
38
+ # break point, never a compiler failure (the decisions)
39
+ CAPACITY_CLASSES = ("capacity",)
40
+ PER_SIGNATURE = 3
41
+
42
+ # a stored row of any format -> the confirmer's outcome classes
43
+ # (offload.engine.confirm.model.OUTCOMES) plus the stress limits
44
+ _CLS = {"agree": "correct_on_device", "compile_reject": "rejected",
45
+ "ice": "ice", "wrong_code": "wrong_answer",
46
+ "host_fallback": "fell_back_to_host", "harness_error":
47
+ "harness_error", "timeout": "timeout", "run_timeout": "timeout",
48
+ "compile_timeout": "timeout", "compile_oom": "compile_oom",
49
+ "probe_rejected": "correct_on_device",
50
+ "probe_accepted": "wrong_answer", "skipped": "skipped",
51
+ "prerun_refused": "refused"}
52
+
53
+
54
+ # --- what a row says ----------------------------------------------------------------
55
+
56
+ def outcome_class(d: dict) -> str:
57
+ """The outcome class of a row of any format: a harness Result
58
+ (``outcome``, ``reason``), a fuzz or stress result (``cls``), a
59
+ confirmer Run (``outcome`` already a class)."""
60
+ cls = _outcome_class(d)
61
+ if cls in ("crash", "run_error", "timeout") and not _compile_side(d):
62
+ from offload.engine.harness import capacity_message
63
+ # (a stress rerun keeps its run output in compile_log)
64
+ text = "\n".join(str(d.get(k) or "") for k in (
65
+ "output", "stdout", "stderr", "reason", "compile_log"))
66
+ if capacity_message(str(d.get("toolchain") or ""), text):
67
+ return "capacity"
68
+ return cls
69
+
70
+
71
+ def _compile_side(d: dict) -> bool:
72
+ return "compile" in str(d.get("reason") or "")[:40]
73
+
74
+
75
+ def _outcome_class(d: dict) -> str:
76
+ if "cls" in d and d.get("cls"):
77
+ cls, reason = d["cls"], d.get("reason") or ""
78
+ if cls == "run_error":
79
+ return "crash" if reason.startswith("crash") else "run_error"
80
+ return _CLS.get(cls, cls)
81
+ from offload.engine.confirm.model import outcome_of_result
82
+ try:
83
+ return outcome_of_result(d.get("outcome", ""), d.get("reason", ""))
84
+ except ValueError:
85
+ return d.get("outcome", "")
86
+
87
+
88
+ def _head(reason: str) -> str:
89
+ return (reason or "").split("; repeats")[0].split("; note:")[0]
90
+
91
+
92
+ def message_key(reason: str) -> str:
93
+ """A compiler message without positions, paths, names, numbers and
94
+ version hashes (the confirmer's message key)."""
95
+ from offload.engine.confirm.decisions import _msg_key
96
+ text = re.sub(r"version \S+", "version", _head(reason))
97
+ text = text.split("; also:")[0]
98
+ # names a build derives from the file's path or inode (clang's
99
+ # __omp_offloading_<dev>_<file id>_<function>_l<line>) and hashes
100
+ text = re.sub(r"__omp_offloading_\w+", "__omp_offloading_", text)
101
+ text = re.sub(r"\b[0-9a-fA-F]{8,}\b", "H", text)
102
+ short = _msg_key(text)
103
+ # the confirmer's key keeps 120 characters: the hash of the whole
104
+ # normalised message tells apart diagnostics whose difference comes
105
+ # later ("... \")\" was expected but found \":\"")
106
+ t = re.sub(r"File = [^|]*\|", "", text)
107
+ t = re.sub(r"ftn: ERROR \S+", "ftn: ERROR", t)
108
+ t = re.sub(r'loc\("[^"]*":\d+:\d+\)', "loc", t)
109
+ t = re.sub(r"<tmpdir>\S*|/\S+", "<path>", t)
110
+ t = re.sub(r'"[A-Za-z0-9_$%]+"', '"X"', t)
111
+ t = re.sub(r"0x[0-9a-fA-F]+|\d+", "N", t)
112
+ full = " ".join(t.split("; repeats")[0].split())
113
+ if len(full) <= 120:
114
+ return short
115
+ return f"{short}#{hashlib.sha1(full.encode()).hexdigest()[:8]}"
116
+
117
+
118
+ # an ICE line that names no defect: the driver's or the front end's own
119
+ # report that something crashed (which of them a run prints first, and
120
+ # how its lines wrap, depends on the build path's length and the output
121
+ # kept), so two ICE observations with one of these are the same failure
122
+ _GENERIC_ICE = re.compile(r"PLEASE submit a bug report|frontend command "
123
+ r"failed|terminated due to receipt of signal|"
124
+ r"ftn: INTERNAL|unable to execute command|"
125
+ r"TERMINATED by signal")
126
+ # CCE's quoted ICE message; a long build path can cut the line inside the
127
+ # quotes (no closing quote: the key ends with "...")
128
+ _CCE_ICE_MSG = re.compile(r'INTERNAL COMPILER ERROR:\s*"([^"]*)("?)')
129
+
130
+
131
+ def generic(key: str) -> bool:
132
+ """An ICE key that names no defect (a generic crash report)."""
133
+ return bool(_GENERIC_ICE.search(key or ""))
134
+
135
+
136
+ def _ice_msg(key: str) -> tuple[str, bool] | None:
137
+ """(message, cut) of a CCE ICE key, None for another key."""
138
+ m = re.match(r'ICE "(.*?)(\.\.\.)?"?(?: @ .*)?$', key or "")
139
+ if not m:
140
+ return None
141
+ return m.group(1), bool(m.group(2))
142
+
143
+
144
+ _ICE_FINDINGS: list | None = None
145
+
146
+
147
+ def ice_findings() -> list:
148
+ """[(toolchains, message regex, file)] of the findings index's ICE
149
+ findings that carry a message pattern (data/findings/index.yaml)."""
150
+ global _ICE_FINDINGS
151
+ if _ICE_FINDINGS is None:
152
+ import yaml
153
+ idx = ROOT / "data" / "findings" / "index.yaml"
154
+ out = []
155
+ if idx.is_file():
156
+ doc = yaml.safe_load(idx.read_text()) or {}
157
+ for f in next(iter(doc.values()), []) if isinstance(
158
+ doc, dict) else doc:
159
+ if f.get("outcome") == "ice" and f.get("message"):
160
+ try:
161
+ out.append((set(f.get("toolchains") or ()),
162
+ re.compile(f["message"]), f["file"]))
163
+ except re.error:
164
+ continue
165
+ _ICE_FINDINGS = out
166
+ return _ICE_FINDINGS
167
+
168
+
169
+ def same_finding(a: str, b: str, toolchain: str | None = None
170
+ ) -> str | None:
171
+ """The finding whose message pattern matches both ICE keys (of
172
+ `toolchain`, when given), or None. CCE's character-map ICE
173
+ prints one of three messages by build path; its finding's pattern
174
+ names all three."""
175
+ for tcs, rx, f in ice_findings():
176
+ if toolchain and tcs and toolchain not in tcs:
177
+ continue
178
+ if rx.search(a) and rx.search(b):
179
+ return f
180
+ return None
181
+
182
+
183
+ def same(a: tuple, b: tuple, toolchain: str | None = None) -> bool:
184
+ """Two observations (class, key) are the same failure: equal, or two
185
+ ICEs whose message is the same (a message cut by a wrapped line is
186
+ compared by its prefix) or of which one names no defect (a generic
187
+ crash report: within one program's reruns only; generic reports never
188
+ key an inherited verdict)."""
189
+ if a == b:
190
+ return True
191
+ if a[0] != b[0] or a[0] != "ice":
192
+ return False
193
+ if generic(a[1]) or generic(b[1]):
194
+ return True
195
+ ma, mb = _ice_msg(a[1]), _ice_msg(b[1])
196
+ if ma and mb:
197
+ (ta, ca), (tb, cb) = ma, mb
198
+ if ta == tb:
199
+ return True
200
+ if ca and len(ta) >= 15 and tb.startswith(ta):
201
+ return True
202
+ if cb and len(tb) >= 15 and ta.startswith(tb):
203
+ return True
204
+ elif a[1].split(" @ ")[0] == b[1].split(" @ ")[0]:
205
+ return True
206
+ # two ICEs whose messages one finding's pattern matches
207
+ return same_finding(a[1], b[1], toolchain) is not None
208
+
209
+
210
+ # the kinds whose programs print named values beside their check line
211
+ # (catalog-style programs and the data-environment programs)
212
+ VALUE_KINDS = ("catalog", "widen", "canary", "dataenv", "oop", "nested")
213
+ _PRINTED = re.compile(r"^\s*([A-Za-z_][\w()%.,:]*)\s*=\s*(-?\d[\d.eE+-]*)\s*$",
214
+ re.M)
215
+
216
+
217
+ def printed_values(stdout: str) -> str:
218
+ """The `name= value` lines a program printed (not its RESULT line), as
219
+ `name=value` pairs in order: '' when it printed none."""
220
+ out = [f"{m.group(1)}={m.group(2)}" for m in _PRINTED.finditer(
221
+ stdout or "") if "RESULT" not in m.group(0)]
222
+ return " ".join(out)
223
+
224
+
225
+ def failure_key(d: dict, cls: str | None = None) -> str:
226
+ """What must stay the same for a failure to count as reproduced: a
227
+ compile failure's message key, a crash's signal, a run error's kind,
228
+ a wrong answer's value (a checksum that changes from run to run is
229
+ nondeterminism), a host fallback, a timeout."""
230
+ cls = cls or outcome_class(d)
231
+ reason = _head(d.get("reason") or "")
232
+ if cls in ("rejected", "ice", "accepted_ignored", "refused"):
233
+ if cls == "ice":
234
+ # CCE's quoted message ("<message> @ <site>": the site may be
235
+ # cut off when a long build path wraps the line), else the
236
+ # compiler-source site or stack frame, else the message
237
+ from offload.engine.confirm import findings as FI
238
+ site = FI.site_of(reason)
239
+ m = _CCE_ICE_MSG.search(reason)
240
+ if m:
241
+ text = m.group(1).rstrip() + ("" if m.group(2) else "...")
242
+ return f"ICE \"{text}\"" + (f" @ {site}" if site else "")
243
+ if site:
244
+ return site
245
+ return message_key(reason)
246
+ if cls == "crash":
247
+ m = re.search(r"\b(SIG[A-Z]+|signal \d+)", reason)
248
+ return m.group(1) if m else "crash"
249
+ if cls == "run_error":
250
+ first = reason.split(";")[0]
251
+ return re.sub(r"0x[0-9a-fA-F]+", "0x", first)[:80] or "run_error"
252
+ if cls == "wrong_answer":
253
+ value = d.get("value")
254
+ if value is None and d.get("checksum") is not None:
255
+ value = f"checksum={d['checksum']}"
256
+ if value is None:
257
+ from offload.engine.confirm.model import value_of
258
+ value = value_of(d.get("stdout") or "")[0]
259
+ bad = d.get("bad_kernels")
260
+ key = f"{value or 'wrong'}" + (f" kernels={','.join(bad)}"
261
+ if bad else "")
262
+ # (the review): a program of a kind
263
+ # with per-program signatures that prints its values beside the
264
+ # check keeps them in the key, so repeats that print different
265
+ # values are nondeterminism, not one confirmed `check=fail`
266
+ vals = printed_values(d.get("stdout") or "") \
267
+ if d.get("kind") in VALUE_KINDS else ""
268
+ return key + (f" {vals}" if vals else "")
269
+ if cls == "timeout":
270
+ return "compile_timeout" if "compile" in reason else "timeout"
271
+ return cls
272
+
273
+
274
+ def observe(d: dict) -> tuple[str, str]:
275
+ """(outcome class, failure key) of a row."""
276
+ cls = outcome_class(d)
277
+ return cls, failure_key(d, cls)
278
+
279
+
280
+ def is_failure(cls: str) -> bool:
281
+ return cls not in PASSING and cls not in NOT_EVIDENCE and \
282
+ cls not in CAPACITY_CLASSES
283
+
284
+
285
+ def _flaky(d: dict) -> bool:
286
+ if d.get("flaky"):
287
+ return True
288
+ runs = d.get("runs")
289
+ if isinstance(runs, list) and len(runs) > 1 and all(
290
+ isinstance(r, dict) for r in runs):
291
+ return len({(r.get("outcome"), r.get("value")) for r in runs}) > 1
292
+ return False
293
+
294
+
295
+ def reread(toolchain: str, cls: str, reason: str, compile_log: str,
296
+ lang: str = "f90") -> tuple[str, str] | None:
297
+ """(class, reason) of a stored compile failure read from its compile
298
+ output with the current message tables (offload.engine.harness: every
299
+ message, the worst class), when that differs from the stored class;
300
+ None when it does not, or there is nothing to read. A
301
+ rejection followed by a front end's crash is an ICE."""
302
+ from offload.engine import harness
303
+ if cls not in ("rejected", "ice", "harness_error") or \
304
+ not (compile_log or "").strip():
305
+ return None
306
+ if cls == "harness_error" and not (reason or "").startswith(
307
+ "unclassified_compile_failure"):
308
+ return None
309
+ found = harness.classify_message(toolchain, compile_log,
310
+ harness.CATEGORY_ORDER[:-1], lang)
311
+ if found is None:
312
+ return None
313
+ cat, line = found
314
+ if cat == "environment":
315
+ new = ("harness_error", f"environment: {line}")
316
+ else:
317
+ new = ("ice" if cat == "ice" else "rejected",
318
+ f"{harness.CODES[cat]}: {line}")
319
+ # a changed class, or a changed kind of message within it (a
320
+ # diagnostic the tables now read as not implemented)
321
+ if new[0] != cls or (reason or "").split(":", 1)[0] != \
322
+ new[1].split(":", 1)[0]:
323
+ return new
324
+ return None
325
+
326
+
327
+ def compile_section(stderr: str) -> str:
328
+ """The compile output a harness row keeps in its stderr."""
329
+ m = re.search(r"--- compile \(rc=[^)]*\) ---\n(.*?)(?:\n--- run |\Z)",
330
+ stderr or "", re.S)
331
+ return m.group(1) if m else ""
332
+
333
+
334
+ # --- environments ---------------------------------------------------------------------
335
+
336
+ # Campaign kinds: the build-directory prefix of a kind's runs
337
+ # (no "-": tests/engine/test_findings.py) and its signature mode, the
338
+ # "feature" a run-time failure's signature carries: "atom" (a catalog-style
339
+ # program id without its version prefix: the versions of one program),
340
+ # "program" (the program itself: a random or generated program has no
341
+ # feature shared with another), "axis" (a stress axis). An undeclared kind
342
+ # is an error (KeyError).
343
+ KINDS: dict[str, dict] = {
344
+ "catalog": {"prefix": "harness_", "signature": "atom"},
345
+ "widen": {"prefix": "harness_", "signature": "atom"},
346
+ "canary": {"prefix": "harness_", "signature": "atom"},
347
+ "fuzz": {"prefix": "fuzz_", "signature": "program"},
348
+ "stress": {"prefix": "st_", "signature": "program"},
349
+ "evidence": {"prefix": "confirm_", "signature": "program"},
350
+ "file": {"prefix": "confirm_", "signature": "program"},
351
+ "ompvv": {"prefix": "baseline_", "signature": "program"},
352
+ # The data-environment catalog (tools/dataenv/dataenv.py gate)
353
+ "dataenv": {"prefix": "dataenv_", "signature": "program"},
354
+ # fortran-oop: the derived-type and OOP families (tools/campaigns/oop.py gate)
355
+ "oop": {"prefix": "oop_", "signature": "program"},
356
+ # nested-data: pointer-linked structures in C and Fortran (tools/campaigns/nested.py)
357
+ "nested": {"prefix": "nested_", "signature": "program"},
358
+ # kernel-body statements (tools/campaigns/kbody.py): a wrong answer's key is the
359
+ # failing observables, not their values (the failure is not deterministic)
360
+ "kbody": {"prefix": "kbody_", "signature": "program"},
361
+ }
362
+ SIGNATURE_MODES = ("atom", "program", "axis")
363
+
364
+
365
+ def register_kind(name: str, prefix: str, signature: str) -> dict:
366
+ """Declare a campaign kind (its build-directory prefix and signature
367
+ mode); a kind that exists with other values is an error."""
368
+ if "-" in prefix or not prefix.endswith("_"):
369
+ raise ValueError(f"prefix {prefix!r}: no '-', ends with '_'")
370
+ if signature not in SIGNATURE_MODES:
371
+ raise ValueError(f"signature mode {signature!r}: one of "
372
+ f"{SIGNATURE_MODES}")
373
+ want = {"prefix": prefix, "signature": signature}
374
+ if KINDS.get(name, want) != want:
375
+ raise ValueError(f"campaign kind {name} is declared otherwise: "
376
+ f"{KINDS[name]}")
377
+ KINDS[name] = want
378
+ return want
379
+
380
+
381
+ def kind_of(row: dict) -> dict:
382
+ k = row.get("kind")
383
+ if k not in KINDS:
384
+ raise KeyError(f"undeclared campaign kind {k!r}: declare it in "
385
+ "offload.engine.gate.KINDS (register_kind)")
386
+ return KINDS[k]
387
+
388
+
389
+ PREFIX = {k: v["prefix"] for k, v in KINDS.items()}
390
+
391
+
392
+ def gate_tmp() -> str:
393
+ """The node-local parent of the gate's build directories (GATE_TMP,
394
+ else STRESS_TMP, else the system temporary directory); a network
395
+ file system is refused (CCE fails to build there and the build path
396
+ changes CCE ftn's behaviour)."""
397
+ import subprocess
398
+ import tempfile
399
+ d = os.environ.get("GATE_TMP") or os.environ.get("STRESS_TMP") or \
400
+ tempfile.gettempdir()
401
+ os.makedirs(d, exist_ok=True)
402
+ fs = subprocess.run(["stat", "-f", "-c", "%T", d], capture_output=True,
403
+ text=True).stdout.strip().lower()
404
+ if fs in ("lustre", "nfs", "gpfs", "nfs4", "fuse.sshfs") or \
405
+ d.startswith(("/p/", "/usr/workspace", "/g/g")):
406
+ raise RuntimeError(f"gate build root {d} is on {fs or 'a network '}"
407
+ "file system: use node-local storage")
408
+ return d
409
+
410
+
411
+ def cell_id(row: dict) -> str:
412
+ """A stable identifier of a failing cell (its campaign, program,
413
+ toolchain, mode and variant)."""
414
+ if row.get("cell"):
415
+ return row["cell"]
416
+ parts = [row.get("campaign", ""), row.get("kind", ""),
417
+ str(row.get("ident") or row.get("program_id") or
418
+ row.get("id") or ""), row.get("toolchain", ""),
419
+ str(row.get("mode", row.get("xnack", ""))),
420
+ row.get("variant", "") or row.get("opt", "")]
421
+ return "|".join(parts)
422
+
423
+
424
+ def _tag(row: dict) -> str:
425
+ return hashlib.sha256(cell_id(row).encode()).hexdigest()[:8]
426
+
427
+
428
+ def _letters(tag: str, n: int = 14) -> str:
429
+ """`n` upper case letters derived from a hex tag (no digit)."""
430
+ h = hashlib.sha256(tag.encode()).digest()
431
+ return "".join(chr(ord("A") + b % 26) for b in h[:n])
432
+
433
+
434
+ def environments(row: dict, root: str | None = None) -> list[dict]:
435
+ """The four environments of one failure: dicts with ``env`` (a-d),
436
+ ``path`` (the build directory), ``node`` ("same": the row's node or a
437
+ node of its machine; "other": another node), ``environment`` (what
438
+ differs from the original: "original", "build_dir", "node") and
439
+ ``repeat`` (0, or 1 for the second run in (a))."""
440
+ root = root if root is not None else gate_tmp()
441
+ orig = row.get("build_dir") or ""
442
+ if orig and orig != "-" and os.path.isabs(orig):
443
+ a_path = orig
444
+ else:
445
+ a_path = os.path.join(root, kind_of(row)["prefix"] + _tag(row))
446
+ b_path = os.path.join(root, "GATE" + _letters(_tag(row)))
447
+ return [
448
+ {"env": "a", "path": a_path, "node": "same",
449
+ "environment": "original", "repeat": 0},
450
+ {"env": "b", "path": b_path, "node": "same",
451
+ "environment": "build_dir", "repeat": 0},
452
+ {"env": "c", "path": a_path, "node": "other",
453
+ "environment": "node", "repeat": 0},
454
+ {"env": "d", "path": a_path, "node": "same",
455
+ "environment": "original", "repeat": 1},
456
+ ]
457
+
458
+
459
+ def _group(env: str) -> str:
460
+ """(a) and (d) are one environment (two runs)."""
461
+ return "a" if env in ("a", "d") else env
462
+
463
+
464
+ # --- the verdict ----------------------------------------------------------------------
465
+
466
+ def killed(d: dict) -> bool:
467
+ """A run ended by SIGKILL: an external kill or the OOM killer of the
468
+ job's memory cgroup (the gate's parallel reruns can exhaust a node's
469
+ memory), not the program's own behaviour."""
470
+ head = _head(d.get("reason") or "")
471
+ return "SIGKILL" in head or bool(re.search(
472
+ r"(?:TERMINATED by |killed by |receipt of )signal 9\b", head)) or \
473
+ str(d.get("checksum")) == "SIGKILL"
474
+
475
+
476
+ # one-host machines: their (c) is another GPU of the host, so a rerun's node
477
+ # keeps its ":gpuN"; on every other machine (c) is another compute node, so
478
+ # a GPU or GCD of (a)'s node is no node change (parity-10-29)
479
+ from offload.engine.confirm.machines import load as _machines # noqa: E402
480
+ ONE_HOST = tuple(m.name for m in _machines().values() if m.one_host)
481
+
482
+
483
+ def node_key(node: str | None) -> str:
484
+ """The part of a rerun's node that (c) must change: the host (Tuolumne,
485
+ Tioga: "tioga39:gpu5" -> "tioga39"), or host and GPU on a one-host
486
+ machine (``ONE_HOST``)."""
487
+ node = node or ""
488
+ host = node.split(":", 1)[0]
489
+ return node if host.split("-", 1)[0].split(".", 1)[0] in ONE_HOST \
490
+ else host
491
+
492
+
493
+ def valid_reruns(reruns: list[dict], row: dict | None = None
494
+ ) -> list[dict]:
495
+ """The reruns that are evidence: not a harness error, not killed by
496
+ signal 9 unless the stored row was too, and an environment (c) only
497
+ on another node than (a) and in the path of (a) (a (c) in
498
+ another path confounds node and path; kept only when no (c) in (a)'s
499
+ path exists)."""
500
+ keep_killed = row is not None and killed(row)
501
+ if row is not None:
502
+ # a rerun is read as its row's kind and toolchain (the failure key
503
+ # of a value kind keeps the printed values)
504
+ reruns = [r if r.get("kind") and r.get("toolchain") else
505
+ {**r, "kind": r.get("kind") or row.get("kind"),
506
+ "toolchain": r.get("toolchain") or row.get("toolchain")}
507
+ for r in reruns]
508
+ out = [r for r in reruns if outcome_class(r) not in NOT_EVIDENCE
509
+ and (keep_killed or not killed(r))]
510
+ a_paths = {r.get("path") for r in out if r.get("env") in ("a", "d")
511
+ and r.get("path")}
512
+ # a (c) on the node (wingtip: GPU) of the row's (a) is no node change
513
+ a_nodes = {node_key(r.get("node")) for r in out
514
+ if r.get("env") in ("a", "d") and r.get("node")}
515
+ out = [r for r in out if r.get("env") != "c" or not r.get("node")
516
+ or node_key(r.get("node")) not in a_nodes]
517
+ same_c = [r for r in out if r.get("env") == "c" and
518
+ r.get("path") in a_paths]
519
+ if same_c:
520
+ out = [r for r in out if r.get("env") != "c" or r in same_c]
521
+ return out
522
+
523
+
524
+ def _version(tb: str | None) -> str:
525
+ return (tb or "").split(" [modules")[0].strip()
526
+
527
+
528
+ def changed_since(row: dict, reruns: list[dict]) -> str | None:
529
+ """What the stored row's provenance says changed since it ran: the
530
+ toolchain build (version banner) or the run environment (env_hash),
531
+ when both sides recorded it; None when nothing recorded differs (a row
532
+ recorded before these fields existed records neither: it is a run of (a))."""
533
+ then = _version(row.get("toolchain_build"))
534
+ now = {_version(r.get("toolchain_build")) for r in reruns
535
+ if r.get("toolchain_build")}
536
+ if then and now and then not in now:
537
+ return f"toolchain build: {then} then, {'; '.join(sorted(now))} now"
538
+ eh = row.get("env_hash")
539
+ ehs = {r.get("env_hash") for r in reruns if r.get("env_hash")}
540
+ if eh and ehs and eh not in ehs:
541
+ return "run environment (env_hash) differs"
542
+ return None
543
+
544
+
545
+ def _distinct(obs: list, toolchain: str | None = None) -> list:
546
+ out = []
547
+ for o in obs:
548
+ if not any(same(o, x, toolchain) for x in out):
549
+ out.append(o)
550
+ return out
551
+
552
+
553
+ def verdict(row: dict, reruns: list[dict]) -> str:
554
+ """The gate's verdict on one failing row (see the module docstring).
555
+ A row whose stored repeats disagree is nondeterministic without a
556
+ rerun; otherwise raises ValueError when no rerun is valid."""
557
+ if _flaky(row):
558
+ return "nondeterministic"
559
+ valid = valid_reruns(reruns, row)
560
+ if not valid:
561
+ raise ValueError("no valid rerun: the row has no verdict")
562
+ obs = [observe(r) for r in valid]
563
+ if not any(is_failure(c) for c, _ in obs):
564
+ return "not_reproduced"
565
+ if any(_flaky(r) for r in valid):
566
+ return "nondeterministic"
567
+ orig = observe(row)
568
+ tc = row.get("toolchain")
569
+ changed = changed_since(row, valid)
570
+ groups: dict[str, list] = defaultdict(list)
571
+ if not changed:
572
+ groups["a"].append(orig) # the stored row ran in (a)
573
+ for r, o in zip(valid, obs):
574
+ groups[_group(r.get("env", "a"))].append(o)
575
+ if any(not same(g[0], o, tc) for g in groups.values() for o in g[1:]):
576
+ return "nondeterministic"
577
+ # values that scatter: three or more distinct failures, or (b) and (c)
578
+ # differing with neither equal to (a)
579
+ if len(_distinct(obs + ([] if changed else [orig]), tc)) >= 3:
580
+ return "nondeterministic"
581
+ ga, gb, gc = groups.get("a"), groups.get("b"), groups.get("c")
582
+ if ga and gb and gc and not same(gb[0], gc[0], tc) and \
583
+ not same(ga[0], gb[0], tc) and not same(ga[0], gc[0], tc):
584
+ return "nondeterministic"
585
+ if all(same(o, orig, tc) for o in obs):
586
+ return "confirmed"
587
+ return "environment"
588
+
589
+
590
+ _CLASSES = (("lower", r"[a-z]"), ("upper", r"[A-Z]"), ("digit", r"\d"),
591
+ ("underscore", r"_"), ("dash", r"-"), ("dot", r"\."))
592
+
593
+
594
+ def _path_traits(path: str) -> set:
595
+ name = path or ""
596
+ out = {f"has {k}" for k, rx in _CLASSES if re.search(rx, name)}
597
+ if re.search(r"-1(?!\d)", name):
598
+ out.add("has '-1' not followed by a digit")
599
+ out.add(f"length {len(name)}")
600
+ return out
601
+
602
+
603
+ def condition(row: dict, reruns: list[dict]) -> str:
604
+ """What separates the failing environments from the others (for an
605
+ ``environment`` verdict): the build directory (and the character
606
+ classes only the failing paths have), the node, the toolchain build,
607
+ or the original run alone. A person pins it down (data/reports/
608
+ gate.md)."""
609
+ valid = valid_reruns(reruns, row)
610
+ orig = observe(row)
611
+ ch = changed_since(row, valid)
612
+ tc = row.get("toolchain")
613
+ same_ = [r for r in valid if same(observe(r), orig, tc)]
614
+ other = [r for r in valid if not same(observe(r), orig, tc)]
615
+ parts = []
616
+ if not same_ and ch:
617
+ return ("changed since: " + ch + "; every rerun gives "
618
+ + ", ".join(sorted({f'{c} ({k[:60]})' for c, k in map(
619
+ observe, valid)})))
620
+ if not same_:
621
+ tb_then = row.get("toolchain_build") or "not recorded"
622
+ tb_now = sorted({r.get("toolchain_build") or "not recorded"
623
+ for r in valid})
624
+ parts.append(
625
+ "original run only: every rerun gives "
626
+ + ", ".join(sorted({f'{c} ({k[:60]})' for c, k in map(
627
+ observe, valid)}))
628
+ + f"; toolchain then: {tb_then}; now: {'; '.join(tb_now)}")
629
+ return "; ".join(parts)
630
+ envs_same = sorted({r.get("env", "?") for r in same_})
631
+ envs_other = sorted({r.get("env", "?") for r in other})
632
+ paths_s = sorted({r.get("path") or r.get("build_dir") or "" for r in
633
+ same_})
634
+ paths_o = sorted({r.get("path") or r.get("build_dir") or "" for r in
635
+ other})
636
+ if set(paths_s).isdisjoint(paths_o):
637
+ # the characters of the part of the paths that differs (below
638
+ # their common parent)
639
+ allp = [p for p in paths_s + paths_o if p]
640
+ common = os.path.commonpath(allp) if len(allp) > 1 else ""
641
+
642
+ def part(p: str) -> str:
643
+ return p[len(common):] if common and p.startswith(common) \
644
+ else p
645
+ ts = set.intersection(*[_path_traits(part(p)) for p in paths_s]) \
646
+ if paths_s else set()
647
+ to = set.union(*[_path_traits(part(p)) for p in paths_o]) \
648
+ if paths_o else set()
649
+ only = sorted(t for t in ts - to if not t.startswith("length"))
650
+ parts.append(f"build directory: the failure in {paths_s} "
651
+ f"(env {','.join(envs_same)}), "
652
+ f"{', '.join(sorted({observe(r)[0] for r in other}))}"
653
+ f" in {paths_o} (env {','.join(envs_other)})"
654
+ + (f"; only the failing paths: {', '.join(only)}"
655
+ if only else ""))
656
+ nodes_s = sorted({r.get("node") or "" for r in same_})
657
+ nodes_o = sorted({r.get("node") or "" for r in other})
658
+ if set(nodes_s).isdisjoint(nodes_o) and any(nodes_s) and any(nodes_o):
659
+ parts.append(f"node: the failure on {nodes_s}, not on {nodes_o}")
660
+ tb_s = {r.get("toolchain_build") for r in same_}
661
+ tb_o = {r.get("toolchain_build") for r in other}
662
+ if tb_s.isdisjoint(tb_o) and any(tb_s) and any(tb_o):
663
+ parts.append(f"toolchain build: {sorted(tb_s)} vs {sorted(tb_o)}")
664
+ return "; ".join(parts) or (
665
+ f"no recorded difference between env {','.join(envs_same)} and "
666
+ f"env {','.join(envs_other)}")
667
+
668
+
669
+ def judge(row: dict, reruns: list[dict]) -> dict:
670
+ """The verdict with its context: ``legality_review``, ``condition``
671
+ (environment verdicts), the environments seen and missing, whether (c)
672
+ really ran on another node, and every rerun's outcome."""
673
+ v = verdict(row, reruns)
674
+ valid = valid_reruns(reruns, row)
675
+ if v == "nondeterministic" and _flaky(row) and not valid:
676
+ # not rerun: its own stored repeats disagree; counted, not queued
677
+ # (the review queue holds rerun rows)
678
+ return {"verdict": v, "legality_review": False, "envs": [],
679
+ "missing": list(ENVS), "node_distinct": False,
680
+ "original": "|".join(observe(row)), "reruns": [],
681
+ "own_repeats": True}
682
+ seen = sorted({r.get("env") for r in valid})
683
+ nodes = {r.get("env"): r.get("node") for r in valid}
684
+ out = {"verdict": v, "legality_review": v in REVIEW,
685
+ "envs": seen, "missing": sorted(set(ENVS) - set(seen)),
686
+ "node_distinct": bool(nodes.get("c")) and
687
+ node_key(nodes.get("c")) not in
688
+ (node_key(nodes.get("a")), node_key(nodes.get("d"))),
689
+ "original": "|".join(observe(row)),
690
+ "reruns": [{"env": r.get("env"),
691
+ "outcome": "|".join(observe(
692
+ {**r, "kind": r.get("kind") or row.get("kind"),
693
+ "toolchain": r.get("toolchain") or
694
+ row.get("toolchain")}))[:200],
695
+ "path": r.get("path", ""), "node": r.get("node", "")}
696
+ for r in reruns]}
697
+ ch = changed_since(row, valid)
698
+ if ch:
699
+ out["changed_since"] = ch
700
+ if _flaky(row):
701
+ out["own_repeats"] = True
702
+ if v == "environment":
703
+ out["condition"] = condition(row, reruns)
704
+ out["needs_condition"] = True
705
+ return out
706
+
707
+
708
+ # --- the budget -----------------------------------------------------------------------
709
+
710
+ def inheritable(row: dict) -> bool:
711
+ """A failure whose verdict another row of its signature may stand for:
712
+ a compile-time failure whose key names its defect (a diagnostic's
713
+ message key, an ICE's message or compiler-source site); never a
714
+ run-time failure or a generic crash report."""
715
+ cls, key = observe(row)
716
+ return cls in COMPILE_CLASSES and not generic(key)
717
+
718
+
719
+ def signature(row: dict) -> str:
720
+ """The signature of a failure: toolchain, outcome class and failure
721
+ key; a compile-time failure whose key names no defect, and every
722
+ run-time failure, also carry the program's feature (the kind's
723
+ signature mode, ``KINDS``: catalog-style atom, the program, or the
724
+ stress axis)."""
725
+ if row.get("signature"):
726
+ return row["signature"]
727
+ cls, key = observe(row)
728
+ tc = row.get("toolchain", "")
729
+ if cls in COMPILE_CLASSES and not generic(key):
730
+ return f"{tc}|{cls}|{key}"
731
+ return f"{tc}|{cls}|{feature(row)}|{key}"
732
+
733
+
734
+ def feature(row: dict) -> str:
735
+ mode = kind_of(row)["signature"]
736
+ ident = str(row.get("ident", ""))
737
+ if mode == "atom":
738
+ return re.sub(r"^(?:omp|acc)\d\d-", "", ident)
739
+ if mode == "axis":
740
+ return str(row.get("axis", "")).split(".")[0] + "|" + ident
741
+ return ident
742
+
743
+
744
+ def coarse(row: dict) -> str:
745
+ """The round-robin group of a run-time failure for sampling: toolchain,
746
+ class and the campaign's run or variant (never a signature)."""
747
+ cls, _ = observe(row)
748
+ loc = row.get("locator") or {}
749
+ grp = loc.get("run") or loc.get("variant") or row.get("axis") or \
750
+ feature(row)
751
+ return f"{row.get('toolchain', '')}|{cls}|{grp}"
752
+
753
+
754
+ # estimated wall seconds of one rerun (compile, or compile and run) by
755
+ # compiler family when the row has no recorded time
756
+ # (gcc: GCC 16.2 with offloading; its compiles measured 0.3 s (Tioga) and
757
+ # 0.8 s (wingtip) median over the catalog, results/gcc/<tc>/sweep.*.jsonl;
758
+ # 2 s allows for the gate's concurrent load)
759
+ from offload.engine.toolchains import registry as _registry # noqa: E402
760
+ COMPILE_S = {f.id: f.compile_s for f in _registry().families.values()}
761
+ RUN_S = 10.0
762
+ KILL_AFTER_S = 10
763
+ COMPILE_LIMIT_S = {"catalog": 900, "widen": 900, "canary": 900,
764
+ "fuzz": 600, "stress": 900, "evidence": 900,
765
+ "file": 900, "dataenv": 900, "ompvv": 900, "oop": 900,
766
+ "nested": 900, "kbody": 900}
767
+
768
+
769
+ def cost_s(row: dict) -> float:
770
+ """Estimated wall seconds of one rerun of a row: its recorded compile
771
+ and run times when it has them; a compile timeout at the compile
772
+ limit, a run timeout at the run limit, each plus the kill-after (review
773
+ cost model)."""
774
+ from offload.engine.confirm.machines import family_of
775
+ try:
776
+ fam = family_of(row.get("toolchain", ""))
777
+ except Exception:
778
+ fam = "cce"
779
+ comp = float(row.get("compile_s") or COMPILE_S.get(fam, 30.0))
780
+ cls = outcome_class(row)
781
+ reason = row.get("reason") or ""
782
+ if cls == "timeout" and "compile" in reason:
783
+ return float(COMPILE_LIMIT_S.get(row.get("kind"), 900)) + \
784
+ KILL_AFTER_S
785
+ if cls in ("rejected", "ice", "accepted_ignored", "compile_oom"):
786
+ return comp
787
+ if cls == "timeout":
788
+ return comp + float(row.get("timeout_s") or 300) + KILL_AFTER_S
789
+ return comp + float(row.get("run_s") or RUN_S)
790
+
791
+
792
+ def plan(rows: list[dict], budget_s: float, per_signature: int = PER_SIGNATURE,
793
+ known: set | frozenset = frozenset(), cost=cost_s,
794
+ envs: int = len(ENVS), overhead_s: float = 0.0) -> dict:
795
+ """Which rows to rerun under `budget_s` (each row costs
796
+ ``envs * cost(row)``; `overhead_s`, the queue and idle-tail allowance
797
+ of the runs, is spent first). Returns ``{"rows": [...], "spent_s",
798
+ "total_s", "over_budget", "budget_s"}``; each row dict gets ``sample``:
799
+ "own" (its stored repeats disagree: nondeterministic, no rerun), "all"
800
+ (within budget, every row), "new" (the first row of a compile-time
801
+ defect signature not in `known`), "runtime" (a run-time or generic
802
+ failure chosen round-robin), "sampled" (up to `per_signature` per
803
+ compile-time signature), "inherited" (not rerun; takes its signature's
804
+ verdict) or "unchecked" (not rerun; no verdict to inherit)."""
805
+ rows = [dict(r) for r in rows]
806
+ for r in rows:
807
+ r["signature"] = signature(r)
808
+ own = [r for r in rows if _flaky(r)]
809
+ for r in own:
810
+ r["sample"] = "own"
811
+ todo = [r for r in rows if not _flaky(r)]
812
+ total = overhead_s + sum(envs * cost(r) for r in todo)
813
+ if total <= budget_s:
814
+ for r in todo:
815
+ r["sample"] = "all"
816
+ return {"rows": rows, "spent_s": total, "total_s": total,
817
+ "over_budget": False, "budget_s": budget_s}
818
+ spent = overhead_s
819
+ chosen: dict[int, str] = {}
820
+
821
+ def take(r, how) -> bool:
822
+ nonlocal spent
823
+ c = envs * cost(r)
824
+ if spent + c > budget_s:
825
+ return False
826
+ chosen[id(r)] = how
827
+ spent += c
828
+ return True
829
+ groups: dict[str, list] = {}
830
+ for r in sorted((r for r in todo if inheritable(r)),
831
+ key=lambda r: (r["signature"], cell_id(r))):
832
+ groups.setdefault(r["signature"], []).append(r)
833
+ order = sorted(groups, key=lambda sg: hashlib.sha256(
834
+ sg.encode()).hexdigest())
835
+ for sig in order: # tier 1: every new defect
836
+ if sig not in known:
837
+ take(groups[sig][0], "new")
838
+ over = any(sig not in known and id(groups[sig][0]) not in chosen
839
+ for sig in order)
840
+ rt: dict[str, list] = {} # tier 2: run-time, round-robin
841
+ for r in sorted((r for r in todo if not inheritable(r)),
842
+ key=lambda r: (coarse(r), hashlib.sha256(
843
+ cell_id(r).encode()).hexdigest())):
844
+ rt.setdefault(coarse(r), []).append(r)
845
+ rorder = sorted(rt, key=lambda g: hashlib.sha256(g.encode()).hexdigest())
846
+ k = 0
847
+ while any(k < len(rt[g]) for g in rorder):
848
+ for g in rorder:
849
+ if k < len(rt[g]):
850
+ take(rt[g][k], "runtime")
851
+ k += 1
852
+ for k in range(per_signature): # tier 3: more per signature
853
+ for sig in order:
854
+ g = groups[sig]
855
+ if k < len(g) and id(g[k]) not in chosen:
856
+ take(g[k], "sampled")
857
+ for r in todo:
858
+ r["sample"] = chosen.get(id(r)) or (
859
+ "inherited" if inheritable(r) else "unchecked")
860
+ return {"rows": rows, "spent_s": spent, "total_s": total,
861
+ "over_budget": over, "budget_s": budget_s}
862
+
863
+
864
+ def inherit(planned: list[dict], verdicts: dict) -> dict:
865
+ """Verdicts for every planned row: a rerun row's own (``verdicts``:
866
+ cell id -> verdict); a row whose stored repeats disagree,
867
+ ``nondeterministic`` on its own evidence; an inheritable row that was
868
+ not rerun (or whose rerun gave no verdict), its signature's worst
869
+ verdict among the rerun rows, marked ``inherited``; every other row
870
+ not rerun, ``unchecked``."""
871
+ by_sig: dict[str, list] = defaultdict(list)
872
+ for r in planned:
873
+ v = verdicts.get(cell_id(r))
874
+ # only a rerun verdict passes on (not_a_failure, illegal: the
875
+ # row's own reading)
876
+ if v in WORST_FIRST and r.get("sample") not in ("inherited",
877
+ "unchecked", "own"):
878
+ by_sig[r["signature"]].append(v)
879
+ out = {}
880
+ for r in planned:
881
+ cid = cell_id(r)
882
+ if _flaky(r):
883
+ out[cid] = {"verdict": "nondeterministic", "inherited": False,
884
+ "own_repeats": True}
885
+ continue
886
+ if cid in verdicts and r.get("sample") not in ("inherited",
887
+ "unchecked"):
888
+ out[cid] = {"verdict": verdicts[cid], "inherited": False}
889
+ continue
890
+ vs = by_sig.get(r["signature"]) if inheritable(r) else None
891
+ if vs:
892
+ worst = min(vs, key=WORST_FIRST.index)
893
+ out[cid] = {"verdict": worst, "inherited": True,
894
+ "from": len(vs)}
895
+ else:
896
+ out[cid] = {"verdict": "unchecked", "inherited": False}
897
+ return out
898
+
899
+
900
+ # --- reading verdicts -----------------------------------------------------------------
901
+
902
+ VERDICTS_FILE = RESULTS / "verdicts.jsonl"
903
+
904
+
905
+ def load_verdicts(path: Path | None = None) -> dict:
906
+ """cell id -> verdict record of the gate's store (later lines win)."""
907
+ path = Path(path) if path else VERDICTS_FILE
908
+ out = {}
909
+ if not path.is_file():
910
+ return out
911
+ for ln in path.read_text().splitlines():
912
+ if ln.strip():
913
+ d = json.loads(ln)
914
+ out[d["cell"]] = d
915
+ return out
916
+
917
+
918
+ _BY_CASE: dict = {}
919
+
920
+
921
+ def _case_index(path: Path | None = None) -> dict:
922
+ """(kind, ident, toolchain, row key) -> verdict record; the catalog
923
+ and the widened catalog are one confirmer kind ("catalog")."""
924
+ key = str(path or VERDICTS_FILE)
925
+ p = Path(key)
926
+ stamp = p.stat().st_mtime if p.is_file() else None
927
+ hit = _BY_CASE.get(key)
928
+ if hit is not None and hit[0] == stamp:
929
+ return hit[1]
930
+ idx = {}
931
+ for d in load_verdicts(p).values():
932
+ kind = "catalog" if d.get("kind") in ("catalog", "widen") else \
933
+ d.get("kind")
934
+ idx[(kind, str(d.get("ident")), d.get("toolchain"),
935
+ int(d.get("xnack") or 0))] = d
936
+ _BY_CASE[key] = (stamp, idx)
937
+ return idx
938
+
939
+
940
+ def verdict_of_case(case, path: Path | None = None) -> dict | None:
941
+ """The gate's verdict record of a confirmer case's own cell, or None
942
+ (not gated)."""
943
+ from offload.engine.confirm import machines as M
944
+ try:
945
+ x = M.load()[case.machine].row_key(case.mode)
946
+ except Exception:
947
+ return None
948
+ return _case_index(path).get((case.program.kind, case.program.ident,
949
+ case.toolchain, int(x)))
950
+
951
+
952
+ # The decisions on the review queue: one per rerun row, keyed by its
953
+ # cell id; a decision applies to the row it names only and never to the
954
+ # rows that inherit from it (they keep the gate's own semantics)
955
+ DECISIONS_FILE = ROOT / "catalog" / "gate_queue.yaml"
956
+
957
+
958
+ def load_decisions(path: Path | None = None) -> dict:
959
+ """cell id -> {verdict, counts_as, group, finding, k} of the decided
960
+ review queue (catalog/gate_queue.yaml); {} when there is none."""
961
+ import yaml
962
+ path = Path(path) if path else DECISIONS_FILE
963
+ if not path.is_file():
964
+ return {}
965
+ doc = yaml.safe_load(path.read_text()) or {}
966
+ return {e["cell"]: {"decision": e.get("verdict"),
967
+ "counts_as": e.get("counts_as"),
968
+ "group": e.get("group"),
969
+ "finding": e.get("finding") or "",
970
+ "k": e.get("k")}
971
+ for e in doc.get("entries", []) if e.get("cell")}
972
+
973
+
974
+ def counts(v: dict | None) -> bool | None:
975
+ """Whether a verdict record makes its row count as a compiler
976
+ failure: a decision's ``counts_as`` first, else the
977
+ verdict (``confirmed``, or ``unchecked``: the row keeps its previous
978
+ outcome, flagged); None for no record."""
979
+ if v is None:
980
+ return None
981
+ if v.get("counts_as") in ("failure", "none"):
982
+ return v["counts_as"] == "failure"
983
+ return v.get("verdict") in ("confirmed", "unchecked")
984
+
985
+
986
+ def counts_as_failure(row: dict, verdicts: dict | None = None) -> bool:
987
+ """Whether a failing row counts as a compiler failure: its gate
988
+ verdict is ``confirmed`` (own or inherited); a row the gate has not
989
+ seen keeps its outcome (results recorded before the gate
990
+ count until it has been run over them)."""
991
+ if not is_failure(outcome_class(row)):
992
+ return False
993
+ v = (verdicts if verdicts is not None else load_verdicts()).get(
994
+ cell_id(row))
995
+ if v is None:
996
+ g = row.get("gate") or ""
997
+ return g in ("", "pending", "confirmed", "n/a")
998
+ # a decided row counts as its decision says; an unchecked row keeps
999
+ # its previous outcome (flagged); an illegal program's failure never
1000
+ # counts
1001
+ return bool(counts(v))
1002
+
1003
+
1004
+ def hook(queue: Path):
1005
+ """A harness gate hook (offload.engine.harness.GATE_HOOKS) that appends
1006
+ every failing Result to `queue` as one JSON line."""
1007
+ import dataclasses
1008
+
1009
+ def append(res) -> None:
1010
+ d = dataclasses.asdict(res)
1011
+ with open(queue, "a") as fh:
1012
+ fh.write(json.dumps(d) + "\n")
1013
+ return append