1subroutine foo
2  type t
3    integer :: i, j
4  end type t
5
6  type t2
7    type(t) :: cc(3)
8  end type t2
9
10  type(t) x, y(3)
11  type(t2) :: z(3)
12
13  ! OK - map whole aggregated variable
14!$acc enter data copyin(x)
15  ! map(to:x [len: 8])
16
17  ! OK - map two components of the aggregated variable
18!$acc enter data copyin(x%j, x%i)
19
20  ! Bad - we cannot mix full-object and component accesses
21!$acc enter data copyin(x, x%i)
22! { dg-error "Symbol .x. has mixed component and non-component accesses" "" { target "*-*-*" } 21 }
23
24  ! Bad - we cannot do a strided access of 'x'
25  ! No C/C++ equivalent
26!$acc enter data copyin(y(:)%i)
27! { dg-error "not a proper array section" "" { target "*-*-*" } 26 }
28
29  ! Bad - again, a strided access
30!$acc enter data copyin(z(1)%cc(:)%i)
31! { dg-error "not a proper array section" "" { target "*-*-*" } 30 }
32end
33