subroutine foo (p) implicit none logical :: p(:) integer a, b, c, d, e, f, g, h; integer :: i a = -1; b = -1; c = -1; d = -1; e = -1; f = -1; g = -1; h = -1 !$omp teams !$omp distribute lastprivate (conditional: a) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } do i = 1, 32 if (p(i)) & a = i end do !$omp distribute simd lastprivate (conditional: b) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } do i = 1, 32 if (p(i)) & b = i end do !$omp distribute parallel do lastprivate (conditional: c) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } do i = 1, 32 if (p(i)) & c = i end do !$omp distribute parallel do simd lastprivate (conditional: d) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } do i = 1, 32 if (p(i)) & d = i end do !$omp end teams !$omp teams distribute parallel do lastprivate (conditional: e) ! { dg-error "conditional 'lastprivate' clause on 'distribute' construct" } do i = 1, 32 if (p(i)) & e = i end do !$omp parallel !$omp master !$omp taskloop lastprivate (conditional: f) ! { dg-error "conditional 'lastprivate' clause on 'taskloop' construct" } do i = 1, 32 if (p(i)) & f = i end do ! !$omp master taskloop simd lastprivate (conditional: g) ! { dg!error "conditional 'lastprivate' clause on 'taskloop' construct" } ! do i = 1, 32 ! if (p(i)) & ! g = i ! end do !$omp end master !$omp end parallel ! !$omp parallel master taskloop simd lastprivate (conditional: h) ! { dg!error "conditional 'lastprivate' clause on 'taskloop' construct" } ! do i = 1, 32 ! if (p(i)) & ! h = i ! end do ! !$omp end parallel master taskloop simd end subroutine !struct S { int a, b; }; subroutine bar (p) implicit none logical :: p(:) type s_t integer :: a, b end type s_t type(s_t) s, t integer i s = s_t(-1, -1) t = s_t( 1, 2) !$omp parallel do lastprivate (conditional: s) ! { dg-error "non-scalar variable 's' in conditional 'lastprivate' clause" } do i = 1, 32 if (p(i)) then block type(s_t) u u = t u%b = i s = u end block end if end do end subroutine