[Bug middle-end/103708] New: [OpenMP][OMP 5.0/5.x] use_device_addr - array sections not supported

burnus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Dec 14 10:51:11 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103708

            Bug ID: 103708
           Summary: [OpenMP][OMP 5.0/5.x] use_device_addr - array sections
                    not supported
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: openmp, rejects-valid
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
                CC: jakub at gcc dot gnu.org
  Target Milestone: ---

Seemingly missed both when implementing the C/C++ version and when implementing
the Fortran version.

Fails with:

foo.c: In function 'foo':
foo.c:5:44: error: expected ')' before '[' token
    5 |   #pragma omp target data use_device_addr(a[1:2])


Example (shows partially mapped data):

int
foo ()
{
  int a[5];
  #pragma omp target enter data map(to:a[1:2])
  #pragma omp target data use_device_addr(a[1:2])
  {
    int *p = &a[1];
    // #pragma omp target has_device_addr(a[1:2])
    //   { /* ... */ }
  }
  #pragma omp target exit data map(delete:a[1:2])
}


OpenMP specification:

* 5.0: https://www.openmp.org/spec-html/5.0/openmpsu57.html#x83-2580002.12.2
  "Array sections privatize the base of the array section and assign the
private copy
   to the address of the corresponding array section in the device data
environment."
* 5.1: https://www.openmp.org/spec-html/5.1/openmpsu65.html#x93-1030002.14.2
  Same/similar to 5.2
* 5.2: "5.4.10 use_device_addr Clause" [123:23-27]
  "The list items that appear in a use_device_addr clause may include array
sections."
  C/C++: "If a list item in a use_device_addr clause is an array section that
has a
          base pointer, the effect of the clause is to convert the base pointer
to a
          pointer that is local to the structured block and that contains the
device
          address. This conversion may be elided if the list item was not
already mapped."

NOTES:

* has_device_addr also supports an array section

* Specification: Lacks description for Fortran - especially for
has_device_addr, but
  also for use_device_addr. That's tracked as OpenMP Specification Issue 3180.

* has_device_addr: Patch to implement it
  https://gcc.gnu.org/pipermail/gcc-patches/2021-November/585361.html


More information about the Gcc-bugs mailing list