forked from OSchip/llvm-project
161 lines
3.4 KiB
Plaintext
161 lines
3.4 KiB
Plaintext
// RUN: not mlir-pdll %s -split-input-file 2>&1 | FileCheck %s
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Constraint Structure
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// CHECK: expected identifier name
|
|
Constraint {}
|
|
|
|
// -----
|
|
|
|
// CHECK: :6:12: error: `Foo` has already been defined
|
|
// CHECK: :5:12: note: see previous definition here
|
|
Constraint Foo() { op<>; }
|
|
Constraint Foo() { op<>; }
|
|
|
|
// -----
|
|
|
|
Constraint Foo() {
|
|
// CHECK: `erase` cannot be used within a Constraint
|
|
erase op<>;
|
|
}
|
|
|
|
// -----
|
|
|
|
Constraint Foo() {
|
|
// CHECK: `replace` cannot be used within a Constraint
|
|
replace;
|
|
}
|
|
|
|
// -----
|
|
|
|
Constraint Foo() {
|
|
// CHECK: `rewrite` cannot be used within a Constraint
|
|
rewrite;
|
|
}
|
|
|
|
// -----
|
|
|
|
Constraint Foo() -> Value {
|
|
// CHECK: `return` terminated the `Constraint` body, but found trailing statements afterwards
|
|
return _: Value;
|
|
return _: Value;
|
|
}
|
|
|
|
// -----
|
|
|
|
// CHECK: missing return in a `Constraint` expected to return `Value`
|
|
Constraint Foo() -> Value {
|
|
let value: Value;
|
|
}
|
|
|
|
// -----
|
|
|
|
// CHECK: expected `Constraint` lambda body to contain a single expression
|
|
Constraint Foo() -> Value => let foo: Value;
|
|
|
|
// -----
|
|
|
|
// CHECK: unable to convert expression of type `Op` to the expected type of `Attr`
|
|
Constraint Foo() -> Attr => op<>;
|
|
|
|
// -----
|
|
|
|
Rewrite SomeRewrite();
|
|
|
|
// CHECK: unable to invoke `Rewrite` within a match section
|
|
Constraint Foo() {
|
|
SomeRewrite();
|
|
}
|
|
|
|
// -----
|
|
|
|
Constraint Foo() {
|
|
Constraint Foo() {};
|
|
}
|
|
|
|
// -----
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Arguments
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// CHECK: expected `(` to start argument list
|
|
Constraint Foo {}
|
|
|
|
// -----
|
|
|
|
// CHECK: expected identifier argument name
|
|
Constraint Foo(10{}
|
|
|
|
// -----
|
|
|
|
// CHECK: expected `:` before argument constraint
|
|
Constraint Foo(arg{}
|
|
|
|
// -----
|
|
|
|
// CHECK: inline `Attr`, `Value`, and `ValueRange` type constraints are not permitted on arguments or results
|
|
Constraint Foo(arg: Value<type>){}
|
|
|
|
// -----
|
|
|
|
// CHECK: expected `)` to end argument list
|
|
Constraint Foo(arg: Value{}
|
|
|
|
// -----
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Results
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// CHECK: expected identifier constraint
|
|
Constraint Foo() -> {}
|
|
|
|
// -----
|
|
|
|
// CHECK: cannot create a single-element tuple with an element label
|
|
Constraint Foo() -> result: Value;
|
|
|
|
// -----
|
|
|
|
// CHECK: cannot create a single-element tuple with an element label
|
|
Constraint Foo() -> (result: Value);
|
|
|
|
// -----
|
|
|
|
// CHECK: expected identifier constraint
|
|
Constraint Foo() -> ();
|
|
|
|
// -----
|
|
|
|
// CHECK: expected `:` before result constraint
|
|
Constraint Foo() -> (result{};
|
|
|
|
// -----
|
|
|
|
// CHECK: expected `)` to end result list
|
|
Constraint Foo() -> (Op{};
|
|
|
|
// -----
|
|
|
|
// CHECK: inline `Attr`, `Value`, and `ValueRange` type constraints are not permitted on arguments or results
|
|
Constraint Foo() -> Value<type>){}
|
|
|
|
// -----
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Native Constraints
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
Pattern {
|
|
// CHECK: external declarations must be declared in global scope
|
|
Constraint ExternalConstraint();
|
|
}
|
|
|
|
// -----
|
|
|
|
// CHECK: expected `;` after native declaration
|
|
Constraint Foo() [{}]
|