https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118965
Bug ID: 118965 Summary: [OpenMP] require at least one target/targetsync with append_args' interop and 'interop's init clause Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: accepts-invalid, diagnostic, openmp Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: burnus at gcc dot gnu.org Target Milestone: --- GCC accepts: omp interop init(obj) init(prefer_type("...") : obj2) and omp declare variant(...) ... append_args(interop(prefer_type("..."))) namely: 'init(...)' and 'append_args(interop(...))' without TARGET or TARGETSYNC. EXPECTED: * Reject this - by requiring at least one of target/targetsync (and no duplicates, but that's already checked for) * This also implies that having modifiers to init are always required and not optional (with 'interop'; in 6.0, 'init' is also clause on 'depend', but there the depinfo-modifier is required) * * * In principle, GCC implementation would be fine: It permits to obtain some data; for instance, whether a certain type of foreign runtime is available at all. Still, as it is not valid, we should reject it. Available data by flag: OpenMP 6.0's "5.6 init Clause" has: * For any interop-type, the properties type, type_name, vendor, vendor_name and device_num will be available * The targetsync interop-type will additionally provide the targetsync property * The target interop-type will additionally provide the following properties … device … device_context … platform * * * OpenMP 5.1 has --------------------------- init([interop-modifier, ]interop-type[[, interop-type] ... ]:interop-var) interop-modifier = prefer_type interop-type = target | targetsync • Each interop-type may be specified on an action-clause at most once --------------------------- OpenMP 5.2 has in "14.1.2 init Clause": --------------------------- interop-preference | prefer_type | complex, unique interop-type | target, targetsync | repeatable, required • Each interop-type may be specified at most once. --------------------------- OpenMP 6.0 has: --------------------------- interop-preference | prefer_type | complex, unique interop-type | target, targetsync | repeatable • If the init clause appears on an interop construct, the interop-type modifier has the required property and each interop-type keyword has the unique property. Otherwise, the interop-type modifier must not be present. ---------------------------