Hi Sebastian!

On 2026-10-04T22:29:32-0500, Sebastian Galindo <[email protected]> 
wrote:
> When the device_type clause had the argument as *,
> the set directive was passing an invalid argument to
> the runtime library.

Where in the OpenACC specification are the semantics of 'set' with
'device_type(*)' described?


Grüße
 Thomas


> gcc/fortran/ChangeLog:
>
>       * trans-openmp.cc: For set, map device_type(*)
>       to GOMP_DEVICE_DEFAULT.
>
> gcc/testsuite/ChangeLog:
>
>       * gfortran.dg/goacc/acc-set-1.f90: New test.
>
> Signed-off-by: Sebastian Galindo <[email protected]>
> ---
>  gcc/fortran/trans-openmp.cc                   | 7 ++++++-
>  gcc/testsuite/gfortran.dg/goacc/acc-set-1.f90 | 7 +++++++
>  2 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc
> index 3e4375f6d60..930027a2741 100644
> --- a/gcc/fortran/trans-openmp.cc
> +++ b/gcc/fortran/trans-openmp.cc
> @@ -6568,7 +6568,12 @@ builtin_oacc_exec_directive:
>                   GOMP_DEVICE_DEFAULT       :
>                   GOMP_DEVICE_NONE;
>    if (clauses->oacc_device_type_present)
> -    device_type = clauses->oacc_device_type;
> +    {
> +      device_type = clauses->oacc_device_type;
> +      /* For set, device_type (*) means the default device, not "all".  */
> +      if (device_type == GOMP_DEVICE_NONE && code->op == EXEC_OACC_SET)
> +     device_type = GOMP_DEVICE_DEFAULT;
> +    }
>  
>    tree d_type = build_int_cst (integer_type_node, device_type);
>  
> diff --git a/gcc/testsuite/gfortran.dg/goacc/acc-set-1.f90 
> b/gcc/testsuite/gfortran.dg/goacc/acc-set-1.f90
> index 013c301c775..5c9e3e3817d 100644
> --- a/gcc/testsuite/gfortran.dg/goacc/acc-set-1.f90
> +++ b/gcc/testsuite/gfortran.dg/goacc/acc-set-1.f90
> @@ -29,8 +29,15 @@ subroutine set4(l)
>    !$acc set if(l) device_type(radeon) device_num(1)
>  end subroutine set4
>  
> +subroutine set5
> +  implicit none
> +  ! device_type(*) maps to GOMP_DEVICE_DEFAULT for set.
> +  !$acc set device_type(*)
> +end subroutine set5
> +
>  ! { dg-final { scan-tree-dump-times "__builtin_GOACC_set_device \\(-1, 2\\)" 
> 1 "original" } }
>  ! { dg-final { scan-tree-dump-times "__builtin_GOACC_set_device \\(-1, 5\\)" 
> 1 "original" } }
>  ! { dg-final { scan-tree-dump-times "__builtin_GOACC_set_device \\(0, 1\\)" 
> 1 "original" } }
>  ! { dg-final { scan-tree-dump-times "__builtin_GOACC_set_device \\(0, 2\\)" 
> 1 "original" } }
>  ! { dg-final { scan-tree-dump-times "__builtin_GOACC_set_device \\(1, 8\\)" 
> 1 "original" } }
> +! { dg-final { scan-tree-dump-times "__builtin_GOACC_set_device \\(-1, 1\\)" 
> 1 "original" } }
> -- 
> 2.55.0

Reply via email to