Hi Tobias!

On 2024-02-13T18:31:02+0100, Tobias Burnus <tbur...@baylibre.com> wrote:
> --- a/gcc/fortran/openmp.cc
> +++ b/gcc/fortran/openmp.cc

> +           /* Device number must be conforming, which includes
> +              omp_initial_device (-1) and omp_invalid_device (-4).  */
> +           if (property_kind == OMP_TRAIT_PROPERTY_DEV_NUM_EXPR
> +               && otp->expr->expr_type == EXPR_CONSTANT
> +               && mpz_sgn (otp->expr->value.integer) < 0
> +               && mpz_cmp_si (otp->expr->value.integer, -1) != 0
> +               && mpz_cmp_si (otp->expr->value.integer, -4) != 0)
> +             {
> +               gfc_error ("property must be a conforming device number "
> +                          "at %C");

Instead of magic numbers, shouldn't this use 'include/gomp-constants.h':

    /* We have a compatibility issue.  OpenMP 5.2 introduced
       omp_initial_device with value of -1 which clashes with our
       GOMP_DEVICE_ICV, so we need to remap user supplied device
       ids, -1 (aka omp_initial_device) to GOMP_DEVICE_HOST_FALLBACK,
       and -2 (one of many non-conforming device numbers, but with
       OMP_TARGET_OFFLOAD=mandatory needs to be treated a
       omp_invalid_device) to -3 (so that for dev_num >= -2U we can
       subtract 1).  -4 is then what we use for omp_invalid_device,
       which unlike the other non-conforming device numbers results
       in fatal error regardless of OMP_TARGET_OFFLOAD.  */
    #define GOMP_DEVICE_ICV                 -1
    #define GOMP_DEVICE_HOST_FALLBACK       -2
    #define GOMP_DEVICE_INVALID             -4


Grüße
 Thomas

Reply via email to