| ! { dg-additional-options "-fdump-tree-original" } |
| |
| ! PR fortran/98476 |
| |
| program abc |
| implicit none |
| integer a, b |
| |
| a = 83 |
| b = 73 |
| call test(a, b) |
| |
| contains |
| subroutine test(aa, bb) |
| use iso_c_binding, only: c_ptr, c_loc, c_f_pointer |
| integer :: aa, bb |
| integer, target :: cc, dd |
| type(c_ptr) :: pcc, pdd |
| cc = 131 |
| dd = 484 |
| |
| !$omp target enter data map(to: aa, bb, cc, dd) |
| |
| !$omp target data use_device_ptr(aa, cc) use_device_addr(bb, dd) |
| pcc = c_loc(cc) |
| pdd = c_loc(dd) |
| |
| ! TODO: has_device_addr(cc, dd) |
| !$omp target is_device_ptr(aa, bb) |
| if (aa /= 83 .or. bb /= 73) stop 1 |
| aa = 42 |
| bb = 43 |
| block |
| integer, pointer :: c2, d2 |
| call c_f_pointer(pcc, c2) |
| call c_f_pointer(pdd, d2) |
| if (c2 /= 131 .or. d2 /= 484) stop 2 |
| c2 = 44 |
| d2 = 45 |
| end block |
| !$omp end target |
| !$omp end target data |
| |
| !$omp target exit data map(from:aa, bb, cc, dd) |
| |
| if (aa /= 42 .or. bb /= 43) stop 3 |
| if (cc /= 44 .or. dd /= 45) stop 5 |
| endsubroutine |
| end program |
| |
| ! { dg-final { scan-tree-dump-times "omp target data .*use_device_addr\\(aa\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "omp target data .*use_device_addr\\(bb\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "omp target data .*use_device_addr\\(cc\\)" 1 "original" } } |
| ! { dg-final { scan-tree-dump-times "omp target data .*use_device_addr\\(dd\\)" 1 "original" } } |