| ! { 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 |