1module m
2  implicit none (external, type)
3  type t
4  end type t
5contains
6subroutine foo (x, y, z, a)
7  external :: bar
8  type(t) :: x
9  integer :: y
10  real :: z
11  integer :: a(4)
12
13  !$omp masked filter (x)  ! { dg-error "FILTER clause at .1. requires a scalar INTEGER expression" }
14    call bar ()
15  !$omp end masked
16
17  !$omp masked filter (y)  ! OK
18    call bar ()
19  !$omp end masked
20
21  !$omp masked filter (z)  ! { dg-error "FILTER clause at .1. requires a scalar INTEGER expression" }
22    call bar ()
23  !$omp end masked
24
25  !$omp masked filter (a)  ! { dg-error "FILTER clause at .1. requires a scalar INTEGER expression" }
26    call bar ()
27  !$omp end masked
28
29  !$omp masked filter (0.0)  ! { dg-error "FILTER clause at .1. requires a scalar INTEGER expression" }
30    call bar ()
31  !$omp end masked
32
33  !$omp masked filter ([1])  ! { dg-error "FILTER clause at .1. requires a scalar INTEGER expression" }
34    call bar ()
35  !$omp end masked
36
37  !$omp masked filter (-1)  ! { dg-warning "INTEGER expression of FILTER clause at .1. must be non-negative" }
38    call bar ()
39  !$omp end masked
40end
41end module
42
43subroutine bar
44  !$omp masked filter (0) filter (0)  ! { dg-error "Duplicated 'filter' clause" }
45    call foobar
46end
47