| ! { dg-do run } |
| |
| use openacc |
| implicit none |
| |
| type t |
| integer :: foo |
| character(len=8), pointer :: bar |
| character(len=4), allocatable :: qux |
| end type t |
| |
| type(t) :: var |
| character(len=8), target :: tgt |
| |
| allocate(var%qux) |
| |
| var%bar => tgt |
| |
| var%foo = 99 |
| tgt = "Octopus!" |
| var%qux = "Fish" |
| |
| !$acc enter data copyin(var, tgt) |
| |
| ! Avoid automatic attach (i.e. with "enter data") |
| call acc_copyin (var%qux) |
| |
| !$acc enter data attach(var%bar, var%qux) |
| |
| !$acc serial |
| ! { dg-warning "using .vector_length \\(32\\)., ignoring 1" "" { target openacc_nvidia_accel_selected } .-1 } |
| var%foo = 5 |
| var%bar = "Plankton" |
| var%qux = "Pond" |
| !$acc end serial |
| |
| !$acc exit data detach(var%bar, var%qux) |
| |
| call acc_copyout (var%qux) |
| |
| !$acc exit data copyout(var, tgt) |
| |
| if (var%foo.ne.5) stop 1 |
| if (tgt.ne."Plankton") stop 2 |
| if (var%qux.ne."Pond") stop 3 |
| |
| end |