1// RUN: mlir-opt -split-input-file -verify-diagnostics %s
2
3func @unknown_clause() {
4  // expected-error@+1 {{invalid is not a valid clause for the omp.parallel operation}}
5  omp.parallel invalid {
6  }
7
8  return
9}
10
11// -----
12
13func @if_once(%n : i1) {
14  // expected-error@+1 {{at most one if clause can appear on the omp.parallel operation}}
15  omp.parallel if(%n) if(%n) {
16  }
17
18  return
19}
20
21// -----
22
23func @num_threads_once(%n : si32) {
24  // expected-error@+1 {{at most one num_threads clause can appear on the omp.parallel operation}}
25  omp.parallel num_threads(%n : si32) num_threads(%n : si32) {
26  }
27
28  return
29}
30
31// -----
32
33func @private_once(%n : memref<i32>) {
34  // expected-error@+1 {{at most one private clause can appear on the omp.parallel operation}}
35  omp.parallel private(%n : memref<i32>) private(%n : memref<i32>) {
36  }
37
38  return
39}
40
41// -----
42
43func @firstprivate_once(%n : memref<i32>) {
44  // expected-error@+1 {{at most one firstprivate clause can appear on the omp.parallel operation}}
45  omp.parallel firstprivate(%n : memref<i32>) firstprivate(%n : memref<i32>) {
46  }
47
48  return
49}
50
51// -----
52
53func @shared_once(%n : memref<i32>) {
54  // expected-error@+1 {{at most one shared clause can appear on the omp.parallel operation}}
55  omp.parallel shared(%n : memref<i32>) shared(%n : memref<i32>) {
56  }
57
58  return
59}
60
61// -----
62
63func @copyin_once(%n : memref<i32>) {
64  // expected-error@+1 {{at most one copyin clause can appear on the omp.parallel operation}}
65  omp.parallel copyin(%n : memref<i32>) copyin(%n : memref<i32>) {
66  }
67
68  return
69}
70
71// -----
72
73func @default_once() {
74  // expected-error@+1 {{at most one default clause can appear on the omp.parallel operation}}
75  omp.parallel default(private) default(firstprivate) {
76  }
77
78  return
79}
80
81// -----
82
83func @proc_bind_once() {
84  // expected-error@+1 {{at most one proc_bind clause can appear on the omp.parallel operation}}
85  omp.parallel proc_bind(close) proc_bind(spread) {
86  }
87
88  return
89}
90