gcc/libgomp/testsuite/libgomp.oacc-fortran/acc-memcpy.f90
Thomas Schwinge 25242ed8eb Fix 'char' initialization, copy, check in 'libgomp.oacc-fortran/acc-memcpy.f90'
Our dear friend '-Wuninitialized' reported:

    [...]/libgomp.oacc-fortran/acc-memcpy.f90:18:27:

       18 |     char(j) = int (j, int8)
          |                           ^
    Warning: ‘j’ may be used uninitialized [-Wmaybe-uninitialized]
    [...]/libgomp.oacc-fortran/acc-memcpy.f90:14:20:

       14 |   integer(int8) :: j
          |                    ^
    note: ‘j’ was declared here

..., but actually there were other issues.

	libgomp/
	* testsuite/libgomp.oacc-fortran/acc-memcpy.f90: Fix 'char'
	initialization, copy, check.
2024-03-14 15:41:33 +01:00

45 lines
901 B
Fortran

! { dg-do run }
! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } }
! based on libgomp.oacc-c-c++-common/lib-60.c
program main
use openacc
use iso_fortran_env
use iso_c_binding
implicit none (type, external)
integer(int8), allocatable :: char(:)
type(c_ptr) :: dptr
integer(c_intptr_t) :: i
allocate(char(-128:127))
do i = -128, 127
char(i) = int (i, int8)
end do
dptr = acc_malloc (256_c_size_t)
call acc_memcpy_to_device (dptr, char, 256_c_size_t)
do i = 0, 255
if (acc_is_present (transfer (transfer(char, i) + i, dptr), 1)) &
stop 1
end do
char = 0_int8
call acc_memcpy_from_device (char, dptr, 256_c_size_t)
do i = -128, 127
if (char(i) /= i) &
stop 2
end do
do i = 0, 255
if (acc_is_present (transfer (transfer(char, i) + i, dptr), 1)) &
stop 3
end do
call acc_free (dptr)
deallocate (char)
end