1subroutine foo (p)
2  implicit none
3  logical :: p(:)
4  integer a, b, c, d, e, f, g, h;
5  integer :: i
6  a = -1; b = -1; c = -1; d = -1; e = -1; f = -1; g = -1; h = -1
7  !$omp teams
8    !$omp distribute lastprivate (conditional: a) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" }
9    do i = 1, 32
10      if (p(i)) &
11        a = i
12    end do
13    !$omp distribute simd lastprivate (conditional: b) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" }
14    do i = 1, 32
15      if (p(i)) &
16        b = i
17    end do
18    !$omp distribute parallel do lastprivate (conditional: c) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" }
19    do i = 1, 32
20      if (p(i)) &
21        c = i
22    end do
23    !$omp distribute parallel do simd lastprivate (conditional: d) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" }
24    do i = 1, 32
25      if (p(i)) &
26        d = i
27    end do
28  !$omp end teams
29
30  !$omp teams distribute parallel do lastprivate (conditional: e) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" }
31  do i = 1, 32
32    if (p(i)) &
33      e = i
34  end do
35
36  !$omp parallel
37    !$omp master
38    !$omp taskloop lastprivate (conditional: f) ! { dg-error "conditional 'lastprivate' clause on 'taskloop' construct" }
39    do i = 1, 32
40      if (p(i)) &
41        f = i
42    end do
43!    !$omp master taskloop simd lastprivate (conditional: g) ! { dg!error "conditional 'lastprivate' clause on 'taskloop' construct" }
44!    do i = 1, 32
45!      if (p(i)) &
46!        g = i
47!    end do
48    !$omp end master
49  !$omp end parallel
50
51!  !$omp parallel master taskloop simd lastprivate (conditional: h) ! { dg!error "conditional 'lastprivate' clause on 'taskloop' construct" }
52!  do i = 1, 32
53!    if (p(i)) &
54!      h = i
55!  end do
56!  !$omp end parallel master taskloop simd
57end subroutine
58
59!struct S { int a, b; };
60
61subroutine bar (p)
62  implicit none
63  logical :: p(:)
64  type s_t
65    integer :: a, b
66  end type s_t
67  type(s_t) s, t
68  integer i
69  s = s_t(-1, -1)
70  t = s_t( 1, 2)
71  !$omp parallel do lastprivate (conditional: s) ! { dg-error "non-scalar variable 's' in conditional 'lastprivate' clause" }
72  do i = 1, 32
73    if (p(i)) then
74      block
75       type(s_t) u
76       u = t
77       u%b = i
78       s = u
79      end block
80    end if
81  end do
82end subroutine
83