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

            Bug ID: 62107
           Summary: libgomp.fortran/target2.f90 FAIL while compiling for
                    OpenMP 4.0 offload target
           Product: gcc
           Version: 4.10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libgomp
          Assignee: unassigned at gcc dot gnu.org
          Reporter: andrey.turetskiy at gmail dot com
                CC: jakub at gcc dot gnu.org

To reproduce with trunk GCC:
gfortran -fopenmp libgomp/testsuite/libgomp.fortran/target2.f90


Reduced testcase:

module target2
contains
  subroutine foo (a)
    integer, pointer :: a
    logical :: r
    !$omp target map (to: a) map (from: r)
      r = a /= 1
    !$omp end target
    if (r) call abort
  end subroutine foo
end module target2

  use target2, only : foo
  integer, pointer :: a
  allocate (a)
  a = 1
  call foo (a)
end


GIMPLE for reduced testcase:

foo (integer(kind=4) * & a)
{
  integer(kind=4) * & a.1;
  logical(kind=4) r.4;
  logical(kind=4) r;

  try
    {
      a.1 = a;

      // Looks like the map clause for data pointed by 'a' is missed

      #pragma omp target map(to:*a.1 [len: 8]) map(alloc:a [pointer assign,
bias: 0]) map(from:r [len: 4])
        {
          {
            integer(kind=4) * & a.2;
            integer(kind=4) * D.2342;
            integer(kind=4) D.2343;
            logical(kind=4) r.3;

            a.2 = a;
            D.2342 = *a.2;
            D.2343 = *D.2342;
            r.3 = D.2343 != 1;
            r = r.3;
          }
        }
      r.4 = r;
      if (r.4 != 0) goto <D.2346>; else goto <D.2347>;
      <D.2346>:
      _gfortran_abort ();
      <D.2347>:
      L.1:
    }
  finally
    {
      r = {CLOBBER};
    }
}

Reply via email to