re PR fortran/70598 (Fortran OpenACC host_data construct ICE)
2016-08-14 Chung-Lin Tang <cltang@codesourcery.com> PR fortran/70598 gcc/fortran/ * openmp.c (resolve_omp_clauses): Adjust use_device clause handling to only allow pointers and arrays. gcc/testsuite/ * gfortran.dg/goacc/host_data-tree.f95: Adjust to use pointers in use_device clause. * gfortran.dg/goacc/uninit-use-device-clause.f95: Likewise. * gfortran.dg/goacc/list.f95: Adjust to catch "neither a POINTER nor an array" error messages. libgomp/ * testsuite/libgomp.oacc-fortran/host_data-1.f90: New test. From-SVN: r239457
This commit is contained in:
parent
c42b0bdf2f
commit
7c7137142c
8 changed files with 81 additions and 18 deletions
|
@ -1,3 +1,9 @@
|
|||
2016-08-14 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
PR fortran/70598
|
||||
* openmp.c (resolve_omp_clauses): Adjust use_device clause
|
||||
handling to only allow pointers and arrays.
|
||||
|
||||
2016-08-12 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/7652
|
||||
|
|
|
@ -3758,17 +3758,24 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
|
|||
&& CLASS_DATA (n->sym)->attr.allocatable))
|
||||
gfc_error ("ALLOCATABLE object %qs in %s clause at %L",
|
||||
n->sym->name, name, &n->where);
|
||||
if (n->sym->attr.pointer
|
||||
|| (n->sym->ts.type == BT_CLASS && CLASS_DATA (n->sym)
|
||||
&& CLASS_DATA (n->sym)->attr.class_pointer))
|
||||
gfc_error ("POINTER object %qs in %s clause at %L",
|
||||
n->sym->name, name, &n->where);
|
||||
if (n->sym->ts.type == BT_CLASS
|
||||
&& CLASS_DATA (n->sym)
|
||||
&& CLASS_DATA (n->sym)->attr.class_pointer)
|
||||
gfc_error ("POINTER object %qs of polymorphic type in "
|
||||
"%s clause at %L", n->sym->name, name,
|
||||
&n->where);
|
||||
if (n->sym->attr.cray_pointer)
|
||||
gfc_error ("Cray pointer object %qs in %s clause at %L",
|
||||
n->sym->name, name, &n->where);
|
||||
if (n->sym->attr.cray_pointee)
|
||||
else if (n->sym->attr.cray_pointee)
|
||||
gfc_error ("Cray pointee object %qs in %s clause at %L",
|
||||
n->sym->name, name, &n->where);
|
||||
else if (n->sym->attr.flavor == FL_VARIABLE
|
||||
&& !n->sym->as
|
||||
&& !n->sym->attr.pointer)
|
||||
gfc_error ("%s clause variable %qs at %L is neither "
|
||||
"a POINTER nor an array", name,
|
||||
n->sym->name, &n->where);
|
||||
/* FALLTHRU */
|
||||
case OMP_LIST_DEVICE_RESIDENT:
|
||||
check_symbol_not_pointer (n->sym, n->where, name);
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2016-08-14 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
PR fortran/70598
|
||||
* gfortran.dg/goacc/host_data-tree.f95: Adjust to use pointers
|
||||
in use_device clause.
|
||||
* gfortran.dg/goacc/uninit-use-device-clause.f95: Likewise.
|
||||
* gfortran.dg/goacc/list.f95: Adjust to catch
|
||||
"neither a POINTER nor an array" error messages.
|
||||
|
||||
2016-08-14 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
PR target/76342
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
program test
|
||||
implicit none
|
||||
integer :: i = 1
|
||||
integer, pointer :: p
|
||||
|
||||
!$acc host_data use_device(i)
|
||||
!$acc host_data use_device(p)
|
||||
!$acc end host_data
|
||||
end program test
|
||||
! { dg-final { scan-tree-dump-times "pragma acc host_data use_device_ptr\\(i\\)" 1 "original" } }
|
||||
! { dg-final { scan-tree-dump-times "pragma acc host_data use_device_ptr\\(p\\)" 1 "original" } }
|
||||
|
|
|
@ -76,19 +76,19 @@ program test
|
|||
!$acc parallel private (i) firstprivate (i) ! { dg-error "present on multiple clauses" }
|
||||
!$acc end parallel
|
||||
|
||||
!$acc host_data use_device(i)
|
||||
!$acc host_data use_device(i) ! { dg-error "neither a POINTER nor an array" }
|
||||
!$acc end host_data
|
||||
|
||||
!$acc host_data use_device(c, d)
|
||||
!$acc host_data use_device(c, d) ! { dg-error "neither a POINTER nor an array" }
|
||||
!$acc end host_data
|
||||
|
||||
!$acc host_data use_device(a)
|
||||
!$acc end host_data
|
||||
|
||||
!$acc host_data use_device(i, j, k, l, a)
|
||||
!$acc host_data use_device(i, j, k, l, a) ! { dg-error "neither a POINTER nor an array" }
|
||||
!$acc end host_data
|
||||
|
||||
!$acc host_data use_device (i) use_device (j)
|
||||
!$acc host_data use_device (i) use_device (j) ! { dg-error "neither a POINTER nor an array" }
|
||||
!$acc end host_data
|
||||
|
||||
!$acc host_data use_device ! { dg-error "Unclassifiable OpenACC directive" }
|
||||
|
@ -99,13 +99,17 @@ program test
|
|||
|
||||
!$acc host_data use_device(10) ! { dg-error "Syntax error" }
|
||||
|
||||
!$acc host_data use_device(/b/, /b/) ! { dg-error "present on multiple clauses" }
|
||||
!$acc host_data use_device(/b/, /b/)
|
||||
!$acc end host_data
|
||||
! { dg-error "neither a POINTER nor an array" "" { target *-*-* } 102 }
|
||||
! { dg-error "present on multiple clauses" "" { target *-*-* } 102 }
|
||||
|
||||
!$acc host_data use_device(i, j, i) ! { dg-error "present on multiple clauses" }
|
||||
!$acc host_data use_device(i, j, i)
|
||||
!$acc end host_data
|
||||
! { dg-error "neither a POINTER nor an array" "" { target *-*-* } 107 }
|
||||
! { dg-error "present on multiple clauses" "" { target *-*-* } 107 }
|
||||
|
||||
!$acc host_data use_device(p1) ! { dg-error "POINTER" }
|
||||
!$acc host_data use_device(p1)
|
||||
!$acc end host_data
|
||||
|
||||
end program test
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
! { dg-additional-options "-Wuninitialized" }
|
||||
|
||||
subroutine test
|
||||
integer :: i
|
||||
integer, pointer :: p
|
||||
|
||||
!$acc host_data use_device(i) ! { dg-warning "is used uninitialized in this function" }
|
||||
!$acc host_data use_device(p) ! { dg-warning "is used uninitialized in this function" }
|
||||
!$acc end host_data
|
||||
end subroutine test
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-08-14 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
|
||||
PR fortran/70598
|
||||
* testsuite/libgomp.oacc-fortran/host_data-1.f90: New test.
|
||||
|
||||
2016-08-08 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/58706
|
||||
|
|
32
libgomp/testsuite/libgomp.oacc-fortran/host_data-1.f90
Normal file
32
libgomp/testsuite/libgomp.oacc-fortran/host_data-1.f90
Normal file
|
@ -0,0 +1,32 @@
|
|||
! { dg-do run }
|
||||
! { dg-additional-options "-cpp" }
|
||||
|
||||
program test
|
||||
implicit none
|
||||
|
||||
integer, target :: i, arr(1000)
|
||||
integer, pointer :: ip, iph
|
||||
integer, contiguous, pointer :: parr(:), parrh(:)
|
||||
|
||||
! Assign the same targets
|
||||
ip => i
|
||||
parr => arr
|
||||
iph => i
|
||||
parrh => arr
|
||||
|
||||
!$acc data copyin(i, arr)
|
||||
!$acc host_data use_device(ip, parr)
|
||||
|
||||
! Test how the pointers compare inside a host_data construct
|
||||
#if ACC_MEM_SHARED
|
||||
if (.not. associated(ip, iph)) call abort
|
||||
if (.not. associated(parr, parrh)) call abort
|
||||
#else
|
||||
if (associated(ip, iph)) call abort
|
||||
if (associated(parr, parrh)) call abort
|
||||
#endif
|
||||
|
||||
!$acc end host_data
|
||||
!$acc end data
|
||||
|
||||
end program test
|
Loading…
Add table
Reference in a new issue