diff options
Diffstat (limited to 'mlir')
| -rw-r--r-- | mlir/lib/TableGen/Pattern.cpp | 8 | ||||
| -rw-r--r-- | mlir/test/mlir-tblgen/expect-symbol.td | 18 |
2 files changed, 25 insertions, 1 deletions
diff --git a/mlir/lib/TableGen/Pattern.cpp b/mlir/lib/TableGen/Pattern.cpp index 2986f30dee6..ddec0bacac4 100644 --- a/mlir/lib/TableGen/Pattern.cpp +++ b/mlir/lib/TableGen/Pattern.cpp @@ -480,8 +480,14 @@ std::vector<tblgen::AppliedConstraint> tblgen::Pattern::getConstraints() const { std::vector<std::string> entities; entities.reserve(dagInit->arg_size()); - for (auto *argName : dagInit->getArgNames()) + for (auto *argName : dagInit->getArgNames()) { + if (!argName) { + PrintFatalError( + def.getLoc(), + "operands to additional constraints can only be symbol references"); + } entities.push_back(argName->getValue()); + } ret.emplace_back(cast<llvm::DefInit>(dagInit->getOperator())->getDef(), dagInit->getNameStr(), std::move(entities)); diff --git a/mlir/test/mlir-tblgen/expect-symbol.td b/mlir/test/mlir-tblgen/expect-symbol.td new file mode 100644 index 00000000000..657c9f8ce02 --- /dev/null +++ b/mlir/test/mlir-tblgen/expect-symbol.td @@ -0,0 +1,18 @@ +// RUN: (mlir-tblgen -gen-rewriters -I %S/../../include %s 2>&1 || true) | FileCheck %s + +include "mlir/IR/OpBase.td" + +def Test_Dialect : Dialect { + let name = "test"; +} + +def OpA : Op<Test_Dialect, "a"> { + let arguments = (ins I32Attr:$attr); +} +def OpB : Op<Test_Dialect, "b"> { + let arguments = (ins I32Attr:$attr); +} + +def : Pat<(OpA $attr), (OpB $attr), + // CHECK: operands to additional constraints can only be symbol references + [(Constraint<CPred<"$0->getValue() == $1">> $attr, 42)]>; |

