Commit 7c713714 by Chung-Lin Tang Committed by Chung-Lin Tang

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
parent c42b0bdf
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);
......
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
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
......
! { 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment