Bug 105318 - [OpenMP][5.1] is_device_ptr rejects valid arguments to has_device_addr
Summary: [OpenMP][5.1] is_device_ptr rejects valid arguments to has_device_addr
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 12.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: openmp, rejects-valid
Depends on:
Blocks:
 
Reported: 2022-04-20 12:29 UTC by Tobias Burnus
Modified: 2022-09-30 11:42 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tobias Burnus 2022-04-20 12:29:49 UTC
OpenMP 5.2 has the following (likewise wording in 5.1):

  "If the is_device_ptr clause is specified on a target construct, if any list item
   is not of type C_PTR, the behavior is as if the list item appeared in a
   has_device_addr clause. Support for such list items in an is_device_ptr clause is
   deprecated."


However, input is rejected due to the OpenMP 5.0 checks:

   12 |         !$omp target is_device_ptr(bbbb, aaaa)
      |                                   1
Error: Non-dummy object ‘bbbb’ in IS_DEVICE_PTR clause at (1)

   12 |         !$omp target is_device_ptr(bbbb, aaaa)
      |                                   1
Error: ALLOCATABLE object ‘bbbb’ in IS_DEVICE_PTR clause at (1)


For:

program main
  implicit none
  integer, allocatable :: aaa(:,:,:)
  allocate (aaa(-4:10,-3:8,2))
  call test_ptr (aaa)
  deallocate (aaa)
contains
  subroutine test_ptr (aaaa)
    integer, allocatable :: aaaa(:,:,:), bbbb(:,:,:)
    !$omp target data map(bbbb, aaaa)
      !$omp target data use_device_ptr(bbbb, aaaa)
        !$omp target is_device_ptr(bbbb, aaaa)
          ! ...
        !$omp end target
      !$omp end target data
    !$omp end target data
    deallocate (bbbb)
  end subroutine test_ptr
end program main
Comment 1 Tobias Burnus 2022-08-17 06:48:29 UTC
Likewise, the following is now permitted:

  type(c_ptr) :: aptr
  ...
  !$omp target is_device_ptr(aPtr)

but still rejected with:

Error: Non-dummy object ‘aptr’ in IS_DEVICE_PTR clause at (1)
Comment 2 GCC Commits 2022-09-30 11:37:52 UTC
The master branch has been updated by Tobias Burnus <burnus@gcc.gnu.org>:

https://gcc.gnu.org/g:10a116104969b3ecc9ea4abdd5436c66fd78d537

commit r13-2980-g10a116104969b3ecc9ea4abdd5436c66fd78d537
Author: Tobias Burnus <tobias@codesourcery.com>
Date:   Fri Sep 30 13:27:32 2022 +0200

    Fortran: Update use_device_ptr for OpenMP 5.1 [PR105318]
    
    OpenMP 5.1 added has_device_addr and relaxed the restrictions for
    use_device_ptr, including processing non-type(c_ptr) arguments as
    if has_device_addr was used. (There is a semantic difference.)
    
    For completeness, the likewise change was done for 'use_device_ptr',
    where non-type(c_ptr) arguments now use use_device_addr.
    
    Finally, a warning for 'device(omp_{initial,invalid}_device)' was
    silenced on the way as affecting the new testcase.
    
            PR fortran/105318
    
    gcc/fortran/ChangeLog:
            * openmp.cc (resolve_omp_clauses): Update is_device_ptr restrictions
            for OpenMP 5.1 and map to has_device_addr where applicable; map
            use_device_ptr to use_device_addr where applicable.
            Silence integer-range warning for device(omp_{initial,invalid}_device).
    
    libgomp/ChangeLog:
            * testsuite/libgomp.fortran/is_device_ptr-2.f90: New test.
    
    gcc/testsuite/ChangeLog:
            * gfortran.dg/gomp/is_device_ptr-1.f90: Remove dg-error.
            * gfortran.dg/gomp/is_device_ptr-2.f90: Likewise.
            * gfortran.dg/gomp/is_device_ptr-3.f90: Update tree-scan-dump.
Comment 3 Tobias Burnus 2022-09-30 11:42:47 UTC
FIXED in GCC 13. (Side note: has_device_addr was added in GCC 12.)