[C++20][modules] Fix std::initializer_list recognition if it's exported out of a...
[llvm-project.git] / mlir / test / mlir-pdll / Parser / rewrite-failure.pdll
blobdd8843d8f85d35a060940504a4cba7daa318b0af
1 // RUN: not mlir-pdll %s -split-input-file 2>&1 | FileCheck %s
3 //===----------------------------------------------------------------------===//
4 // Rewrite Structure
5 //===----------------------------------------------------------------------===//
7 // CHECK: expected identifier name
8 Rewrite {}
10 // -----
12 // CHECK: :6:9: error: `Foo` has already been defined
13 // CHECK: :5:9: note: see previous definition here
14 Rewrite Foo();
15 Rewrite Foo();
17 // -----
19 Rewrite Foo() -> Value {
20   // CHECK: `return` terminated the `Rewrite` body, but found trailing statements afterwards
21   return _: Value;
22   return _: Value;
25 // -----
27 // CHECK: missing return in a `Rewrite` expected to return `Value`
28 Rewrite Foo() -> Value {
29   let value: Value;
32 // -----
34 // CHECK: missing return in a `Rewrite` expected to return `Value`
35 Rewrite Foo() -> Value => erase op<my_dialect.foo>;
37 // -----
39 // CHECK: unable to convert expression of type `Op<my_dialect.foo>` to the expected type of `Attr`
40 Rewrite Foo() -> Attr => op<my_dialect.foo>;
42 // -----
44 // CHECK: expected `Rewrite` lambda body to contain a single expression or an operation rewrite statement; such as `erase`, `replace`, or `rewrite`
45 Rewrite Foo() => let foo = op<my_dialect.foo>;
47 // -----
49 Constraint ValueConstraint(value: Value);
51 // CHECK: unable to invoke `Constraint` within a rewrite section
52 Rewrite Foo(value: Value) {
53   ValueConstraint(value);
56 // -----
58 Rewrite Bar();
60 // CHECK: `Bar` has already been defined
61 Rewrite Foo() {
62   Rewrite Bar() {};
65 // -----
67 //===----------------------------------------------------------------------===//
68 // Arguments
69 //===----------------------------------------------------------------------===//
71 // CHECK: expected `(` to start argument list
72 Rewrite Foo {}
74 // -----
76 // CHECK: expected identifier argument name
77 Rewrite Foo(10{}
79 // -----
81 // CHECK: expected `:` before argument constraint
82 Rewrite Foo(arg{}
84 // -----
86 // CHECK: inline `Attr`, `Value`, and `ValueRange` type constraints are not permitted on arguments or results
87 Rewrite Foo(arg: Value<type>){}
89 // -----
91 // CHECK: expected `)` to end argument list
92 Rewrite Foo(arg: Value{}
94 // -----
96 //===----------------------------------------------------------------------===//
97 // Results
98 //===----------------------------------------------------------------------===//
100 // CHECK: expected identifier constraint
101 Rewrite Foo() -> {}
103 // -----
105 // CHECK: cannot create a single-element tuple with an element label
106 Rewrite Foo() -> result: Value;
108 // -----
110 // CHECK: cannot create a single-element tuple with an element label
111 Rewrite Foo() -> (result: Value);
113 // -----
115 // CHECK: expected identifier constraint
116 Rewrite Foo() -> ();
118 // -----
120 // CHECK: expected `:` before result constraint
121 Rewrite Foo() -> (result{};
123 // -----
125 // CHECK: expected `)` to end result list
126 Rewrite Foo() -> (Op{};
128 // -----
130 // CHECK: inline `Attr`, `Value`, and `ValueRange` type constraints are not permitted on arguments or results
131 Rewrite Foo() -> Value<type>){}
133 // -----
135 //===----------------------------------------------------------------------===//
136 // Native Rewrites
137 //===----------------------------------------------------------------------===//
139 Pattern {
140   // CHECK: external declarations must be declared in global scope
141   Rewrite ExternalConstraint();
144 // -----
146 // CHECK: expected `;` after native declaration
147 Rewrite Foo() [{}]