Fix GCC build problem with 288f05f related to SmallVector. (#116958)
[llvm-project.git] / mlir / test / mlir-pdll / Parser / stmt-failure.pdll
blobaaf45a96033520ee500e1e64559402e605da5b0f
1 // RUN: not mlir-pdll %s -I %S -I %S/../../../include -split-input-file 2>&1 | FileCheck %s
3 // CHECK: expected top-level declaration, such as a `Pattern`
4 10
6 // -----
8 Pattern {
9   // CHECK: expected `;` after statement
10   erase _: Op
13 // -----
15 //===----------------------------------------------------------------------===//
16 // `erase`
17 //===----------------------------------------------------------------------===//
19 Pattern {
20   // CHECK: expected expression
21   erase;
24 // -----
26 Pattern {
27   // CHECK: expected `Op` expression
28   erase _: Attr;
31 // -----
33 //===----------------------------------------------------------------------===//
34 // `let`
35 //===----------------------------------------------------------------------===//
37 Pattern {
38   // CHECK: expected identifier after `let` to name a new variable
39   let 5;
42 // -----
44 Pattern {
45   // CHECK: `_` may only be used to define "inline" variables
46   let _;
49 // -----
51 Pattern {
52   // CHECK: expected expression
53   let foo: Attr<>;
56 // -----
58 Pattern {
59   // CHECK: expected expression of `Type` in type constraint
60   let foo: Attr<_: Attr>;
63 // -----
65 Pattern {
66   // CHECK: expected `>` after variable type constraint
67   let foo: Attr<_: Type{};
70 // -----
72 Pattern {
73   // CHECK: the type of this variable has already been constrained
74   let foo: [Attr<_: Type>, Attr<_: Type];
77 // -----
79 Pattern {
80   // CHECK: expected `.` after dialect namespace
81   let foo: Op<builtin>;
84 // -----
86 Pattern {
87   // CHECK: expected operation name after dialect namespace
88   let foo: Op<builtin.>;
91 // -----
93 Pattern {
94   // CHECK: expected `>` after operation name
95   let foo: Op<func.func<;
98 // -----
100 Pattern {
101   // CHECK: expected expression
102   let foo: Value<>;
105 // -----
107 Pattern {
108   // CHECK: expected expression of `Type` in type constraint
109   let foo: Value<_: Attr>;
112 // -----
114 Pattern {
115   // CHECK: expected `>` after variable type constraint
116   let foo: Value<_: Type{};
119 // -----
121 Pattern {
122   // CHECK: the type of this variable has already been constrained
123   let foo: [Value<_: Type>, Value<_: Type];
126 // -----
128 Pattern {
129   // CHECK: expected expression
130   let foo: ValueRange<10>;
133 // -----
135 Pattern {
136   // CHECK: expected expression of `TypeRange` in type constraint
137   let foo: ValueRange<_: Type>;
140 // -----
142 Pattern {
143   // CHECK: expected `>` after variable type constraint
144   let foo: ValueRange<_: Type{};
147 // -----
149 Pattern {
150   // CHECK: the type of this variable has already been constrained
151   let foo: [ValueRange<_: Type>, ValueRange<_: Type];
154 // -----
156 Pattern {
157   // CHECK: unknown reference to constraint `UnknownConstraint`
158   let foo: UnknownConstraint;
161 // -----
163 Pattern Foo {
164   erase root: Op;
167 Pattern {
168   // CHECK: invalid reference to non-constraint
169   let foo: Foo;
172 // -----
174 Pattern {
175   // CHECK: constraint type `Attr` is incompatible with the previously inferred type `Value`
176   let foo: [Value, Attr];
179 // -----
181 Pattern {
182   // CHECK: expected `]` after constraint list
183   let foo: [Attr[];
186 // -----
188 Pattern {
189   // CHECK: expected expression
190   let foo: Attr = ;
193 // -----
195 Pattern {
196   // CHECK: type constraints are not permitted on variables with initializers
197   let foo: ValueRange<_: Type> = _: Op;
200 // -----
202 Pattern {
203   // CHECK: unable to infer type for variable `foo`
204   // CHECK: note: the type of a variable must be inferable from the constraint list or the initializer
205   let foo;
208 // -----
210 Pattern {
211   // CHECK: unable to convert expression of type `Attr` to the expected type of `Value`
212   let foo: Value = _: Attr;
215 // -----
217 Pattern {
218   // CHECK: :7:7: error: `foo` has already been defined
219   // CHECK: :6:7: note: see previous definition here
220   let foo: Attr;
221   let foo: Attr;
224 // -----
226 Constraint Foo();
228 Pattern {
229   // CHECK: unable to define variable of `Constraint` type
230   let foo = Foo;
233 // -----
235 Rewrite Foo();
237 Pattern {
238   // CHECK: unable to define variable of `Rewrite` type
239   let foo = Foo;
242 // -----
244 Constraint MultiConstraint(arg1: Value, arg2: Value);
246 Pattern {
247   // CHECK: `Constraint`s applied via a variable constraint list must take a single input, but got 2
248   let foo: MultiConstraint;
251 // -----
253 #include "include/ops.td"
255 Pattern {
256   // CHECK: unable to convert expression of type `Op<test.all_empty>` to the expected type of `Value` 
257   // CHECK: see the definition of `test.all_empty`, which was defined with zero results
258   let value: Value = op<test.all_empty>;
259   erase _: Op;
262 // -----
264 #include "include/ops.td"
266 Pattern {
267   // CHECK: unable to convert expression of type `Op<test.multiple_single_result>` to the expected type of `Value` 
268   // CHECK: see the definition of `test.multiple_single_result`, which was defined with at least 2 results
269   let value: Value = op<test.multiple_single_result>;
270   erase _: Op;
273 // -----
275 //===----------------------------------------------------------------------===//
276 // `replace`
277 //===----------------------------------------------------------------------===//
279 Pattern {
280   // CHECK: expected `Op` expression
281   replace attr<""> with attr<"">;
284 // -----
286 Pattern {
287   // CHECK: expected `with` after root operation
288   replace op<>;
291 // -----
293 Pattern {
294   // CHECK: expected `Op`, `Value` or `ValueRange` expression
295   replace op<> with attr<"">;
298 // -----
300 Pattern {
301   // CHECK: expected `Op`, `Value` or `ValueRange` expression
302   replace op<> with (attr<"">);
305 // -----
307 Pattern {
308   // CHECK: expected `)` after replacement values
309   replace op<>(input: Value) with (input;
312 // -----
314 Pattern {
315   // CHECK: expected at least one replacement value, consider using `erase` if no replacement values are desired
316   replace op<>(input: Value) with ();
319 // -----
321 Pattern {
322   // CHECK: expected dialect namespace
323   replace op<>(input: Value) with op<>;
326 // -----
328 //===----------------------------------------------------------------------===//
329 // `return`
330 //===----------------------------------------------------------------------===//
332 // CHECK: expected `;` after statement
333 Constraint Foo(arg: Value) -> Value {
334   return arg
337 // -----
339 //===----------------------------------------------------------------------===//
340 // `rewrite`
341 //===----------------------------------------------------------------------===//
343 Pattern {
344   // CHECK: expected `Op` expression
345   rewrite attr<""> with { op<toy.reshape>; };
348 // -----
350 Pattern {
351   // CHECK: expected `with` before rewrite body
352   rewrite op<>;
355 // -----
357 Pattern {
358   // CHECK: expected `{` to start rewrite body
359   rewrite op<> with;
362 // -----
364 Pattern {
365   // CHECK: expected dialect namespace
366   rewrite root: Op with {
367       op<>;
368   };
371 // -----
373 Pattern {
374   // CHECK: `return` statements are only permitted within a `Constraint` or `Rewrite` body
375   rewrite root: Op with {
376       return root;
377   };