1! { dg-do run }
2
3module typemod
4
5type :: typeimpl
6  real, pointer :: p(:) => null()
7end type typeimpl
8
9type :: basictype
10  class(typeimpl), pointer :: p => null()
11end type basictype
12
13type, extends(basictype) :: regulartype
14  character :: void
15end type regulartype
16
17end module typemod
18
19program main
20  use typemod
21  implicit none
22  type(regulartype), pointer :: myvar
23  integer :: i
24  real :: j, k
25
26  allocate(myvar)
27  allocate(myvar%p)
28  allocate(myvar%p%p(1:100))
29
30  do i=1,100
31    myvar%p%p(i) = -1.0
32  end do
33
34!$acc enter data copyin(myvar)
35!$acc enter data copyin(myvar%p) create(myvar%p%p)
36
37!$acc parallel loop present(myvar%p%p)
38  do i=1,100
39    myvar%p%p(i) = i * 2
40  end do
41!$acc end parallel loop
42
43!$acc exit data copyout(myvar%p%p) delete(myvar%p)
44!$acc exit data delete(myvar)
45
46  do i=1,100
47    if (myvar%p%p(i) .ne. i * 2) stop 1
48  end do
49
50end program main
51