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