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
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)
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.
FIXED in GCC 13. (Side note: has_device_addr was added in GCC 12.)