Fix GCC build problem with 288f05f related to SmallVector. (#116958)
[llvm-project.git] / mlir / test / mlir-pdll / Parser / constraint-failure.pdll
blob48747d3fa2e681ef88ab216bd8bfbfd4254d2a50
1 // RUN: not mlir-pdll %s -split-input-file 2>&1 | FileCheck %s
3 //===----------------------------------------------------------------------===//
4 // Constraint Structure
5 //===----------------------------------------------------------------------===//
7 // CHECK: expected identifier name
8 Constraint {}
10 // -----
12 // CHECK: :6:12: error: `Foo` has already been defined
13 // CHECK: :5:12: note: see previous definition here
14 Constraint Foo() { op<>; }
15 Constraint Foo() { op<>; }
17 // -----
19 Constraint Foo() {
20   // CHECK: `erase` cannot be used within a Constraint
21   erase op<>;
24 // -----
26 Constraint Foo() {
27   // CHECK: `replace` cannot be used within a Constraint
28   replace;
31 // -----
33 Constraint Foo() {
34   // CHECK: `rewrite` cannot be used within a Constraint
35   rewrite;
38 // -----
40 Constraint Foo() -> Value {
41   // CHECK: `return` terminated the `Constraint` body, but found trailing statements afterwards
42   return _: Value;
43   return _: Value;
46 // -----
48 // CHECK: missing return in a `Constraint` expected to return `Value`
49 Constraint Foo() -> Value {
50   let value: Value;
53 // -----
55 // CHECK: expected `Constraint` lambda body to contain a single expression
56 Constraint Foo() -> Value => let foo: Value;
58 // -----
60 // CHECK: unable to convert expression of type `Op` to the expected type of `Attr`
61 Constraint Foo() -> Attr => op<>;
63 // -----
65 Rewrite SomeRewrite();
67 // CHECK: unable to invoke `Rewrite` within a match section
68 Constraint Foo() {
69   SomeRewrite();
72 // -----
74 Constraint Foo() {
75   Constraint Foo() {};
78 // -----
80 //===----------------------------------------------------------------------===//
81 // Arguments
82 //===----------------------------------------------------------------------===//
84 // CHECK: expected `(` to start argument list
85 Constraint Foo {}
87 // -----
89 // CHECK: expected identifier argument name
90 Constraint Foo(10{}
92 // -----
94 // CHECK: expected `:` before argument constraint
95 Constraint Foo(arg{}
97 // -----
99 // CHECK: inline `Attr`, `Value`, and `ValueRange` type constraints are not permitted on arguments or results
100 Constraint Foo(arg: Value<type>){}
102 // -----
104 // CHECK: expected `)` to end argument list
105 Constraint Foo(arg: Value{}
107 // -----
109 //===----------------------------------------------------------------------===//
110 // Results
111 //===----------------------------------------------------------------------===//
113 // CHECK: expected identifier constraint
114 Constraint Foo() -> {}
116 // -----
118 // CHECK: cannot create a single-element tuple with an element label
119 Constraint Foo() -> result: Value {}
121 // -----
123 // CHECK: cannot create a single-element tuple with an element label
124 Constraint Foo() -> (result: Value) {}
126 // -----
128 // CHECK: expected identifier constraint
129 Constraint Foo() -> () {}
131 // -----
133 // CHECK: expected `:` before result constraint
134 Constraint Foo() -> (result {};
136 // -----
138 // CHECK: expected `)` to end result list
139 Constraint Foo() -> (Op{};
141 // -----
143 // CHECK: inline `Attr`, `Value`, and `ValueRange` type constraints are not permitted on arguments or results
144 Constraint Foo() -> Value<type>) {}
146 // -----
148 //===----------------------------------------------------------------------===//
149 // Native Constraints
150 //===----------------------------------------------------------------------===//
152 Pattern {
153   // CHECK: external declarations must be declared in global scope
154   Constraint ExternalConstraint();
157 // -----
159 // CHECK: expected `;` after native declaration
160 Constraint Foo() [{}]