OpenMP 6.0 (GNU libgomp)

### 2.5 OpenMP 6.0 ¶

#### New features listed in Appendix B of the OpenMP specification ¶

Features deprecated in versions 5.0, 5.1 and 5.2 were removed | N/A | Backward compatibility
Full support for C23 was added | Y |
Full support for C++23 was added | P |
Full support for Fortran 2023 was added | P |
`_ALL` suffix to the device-scope environment variables | P | Host device number wrongly accepted
`num_threads` clause now accepts a list | N |
Abstract names added for `OMP_NUM_THREADS`, `OMP_THREAD_LIMIT` and `OMP_TEAMS_THREAD_LIMIT` | N |
Supporting increments with abstract names in `OMP_PLACES` | N |
Extension of `OMP_DEFAULT_DEVICE` and new `OMP_AVAILABLE_DEVICES` environment vars | N |
New `uid` trait for target devices and for `OMP_AVAILABLE_DEVICES` and `OMP_DEFAULT_DEVICE` | N |
New `OMP_THREADS_RESERVE` environment variable | N |
The `decl` attribute was added to the C++ attribute syntax | Y |
The OpenMP directive syntax was extended to include C23 attribute specifiers | Y |
Support for pure directives in Fortran’s `do concurrent` | N |
All inarguable clauses take now an optional Boolean argument | N |
The `adjust_args` clause was extended to specify the argument by position and supports variadic arguments | N |
For Fortran, locator list can be also function reference with data pointer result | N |
Concept of assumed-size arrays in C and C++ | N |
directive-name-modifier accepted in all clauses | N |
Extension of `interop` operation of `append_args`, allowing all modifiers of the `init` clause | Y |
New argument-free version of `depobj` with repeatable clauses and the `init` clause | N |
Undeprecate omitting the argument to the `depend` clause of the argument version of the `depend` construct | Y |
For Fortran, atomic with BLOCK construct and, for C/C++, with unlimited curly braces supported | N |
For Fortran, atomic with pointer comparison | N |
For Fortran, atomic with enum and enumeration types | N |
For Fortran, atomic compare with storing the comparison result | N |
Canonical loop sequences and new `looprange` clause | N |
For Fortran, handling polymorphic types in data-sharing-attribute clauses | P | `private` not supported
For Fortran, rejecting polymorphic types in data-mapping clauses | N | not diagnosed (and mostly unsupported)
New `taskgraph` construct including `saved` modifier and `replayable` clause | N |
`default` clause on the `target` directive and accepting variable categories | N |
Semantic change regarding the reference count update with `use_device_ptr` and `use_device_addr` | N |
Support for inductions | N |
Reduction over private variables with `reduction` clause | N |
Implicit reduction identifiers of C++ classes | N |
New `init_complete` clause to the `scan` directive | N |
`ref` modifier to the `map` clause | N |
New `storage` map-type modifier; context-dependent `alloc` and `release` are aliases | N |
Change of the map-type property from ultimate to default | N |
`self` modifier to `map` and `self` as `defaultmap` argument | N |
Mapping of assumed-size arrays in C, C++ and Fortran | N |
`delete` as delete-modifier not as map type | N |
For Fortran, the `automap` modifier to the `enter` clause of `declare_target` | N |
`groupprivate` directive | N |
`local` clause to `declare_target` directive | N |
`part_size` allocator trait for `interleaved` allocator partitions | N |
`pin_device`, `preferred_device` and `target_access` allocator traits | N |
`access` allocator trait changes | N |
New `partitioner` value to `partition` allocator trait | N |
Semicolon-separated list to `uses_allocators` | Y |
New `need_device_addr` modifier to `adjust_args` clause | N |
`interop` clause to `dispatch` | Y |
Scope requirement changes for `declare_target` | N |
`message` and `severity` clauses to `parallel` directive | N |
`self_maps` clause to `requires` directive | Y |
`no_openmp_constructs` assumptions clause | Y |
Restriction for `ordered` regarding loop-transforming directives | N |
`apply` clause to loop-transforming constructs | N |
Non-constant values in the `sizes` clause | N |
`fuse` loop-transformation construct | N |
`interchange` loop-transformation construct | N |
`reverse` loop-transformation construct | N |
`split` loop-transformation construct | N |
`stripe` loop-transformation construct | N |
`tile` permitting association of grid and inter-tile loops | N |
`strict` modifier keyword to `num_threads` | N |
`safesync` clause to the `parallel` construct | N |
`omp_curr_progress_width` identifier | N |
`omp_get_max_progress_width` runtime routine | N |
Lifted restrictions on `order(concurrent)` and, hence, the `loop` construct | N |
`atomic` permitted in a construct with `order(concurrent)` | N |
Lifted restrictions on not-strictly-nested regions with `order(concurrent)` | N |
`workdistribute` directive for Fortran | N |
Fortran `DO CONCURRENT` as associated loop in a `loop` construct | N |
New `task_iteration` directive inside `taskloop` | N |
`threadset` clause in task-generating constructs | N |
New `priority` clause to `target`, `target_enter_data`, `target_data`, `target_exit_data` and `target_update` | N |
New `device_type` clause to the `target` directive | Y |
`target_data` as composite construct | N |
`nowait` clause with reverse-offload `target` directives | N |
Extended prefer-type modifier to `init` clause | Y |
Boolean argument to `nowait` and `nogroup` may be non constant | N |
`memscope` clause to `atomic` and `flush` | N |
New `transparent` clause for multi-generational task-dependence graphs | N |
The `cancel` construct now completes tasks with unfulfilled events | N |
`omp_fulfill_event` routine was restricted regarding fulfillment of event variables | N |
Added rule for compound-directive names, permitting many more combinations | N |
`omp_is_free_agent` and `omp_ancestor_is_free_agent` routines | N |
`omp_get_device_from_uid` and `omp_get_uid_from_device` routines | Y |
`omp_get_device_num_teams`, `omp_set_device_num_teams`, `omp_get_device_teams_thread_limit`, and `omp_set_device_teams_thread_limit` routines | N |
`omp_target_memset` and `omp_target_memset_async` routines | Y |
Fortran version of the interop runtime routines | Y |
Routines for obtaining memory spaces/allocators for shared/device memory | N |
`omp_get_memspace_num_resources` routine | N |
`omp_get_memspace_pagesize` routine | N |
`omp_get_submemspace` routine | N |
`omp_init_mempartitioner`, `omp_destroy_mempartitioner`, `omp_init_mempartition`, `omp_destroy_mempartition`, `omp_mempartition_set_part`, `omp_mempartition_get_user_data` routines | N |
Deprecation of the `target_data_op`, `target`, `target_map` and `target_submit` callbacks and as values that `set_callback` must return | N |
`ompt_target_data_transfer` and `ompt_target_data_transfer_async` values in `ompt_target_data_op_t` enum | N |
The values `ompt_target_data_transfer_to_device`, `ompt_target_data_transfer_from_device`, `ompt_target_data_transfer_to_device_async` and `ompt_target_data_transfer_from_device_async` of the `target_data_op` OMPT type were deprecated | N |
`ompt_get_buffer_limits` OMPT routine | N |

#### Deprecated features, unless listed above ¶

Deprecation of omitting the optional white space to separate adjacent keywords in the directive-name in Fortran (fixed and free source form) | N |
Deprecation of the combiner expression in the `declare_reduction` argument | N |
Deprecation of the Fortran include file `omp_lib.h` | N |

#### Other new OpenMP 6.0 features ¶

Multi-word directives now use underscore by default | N |
Relaxed Fortran restrictions to the `aligned` clause | N |
Mapping lambda captures | N |
New `omp_pause_stop_tool` constant for `omp_pause_resource` | Y |
In Fortran (fixed and free source form), spaces between directive names are mandatory | N |
Update of the map-type decay for mapping and `declare_mapper` | N |