diff --git a/flang/include/flang/Optimizer/Dialect/FIROps.td b/flang/include/flang/Optimizer/Dialect/FIROps.td --- a/flang/include/flang/Optimizer/Dialect/FIROps.td +++ b/flang/include/flang/Optimizer/Dialect/FIROps.td @@ -1841,14 +1841,7 @@ operands attr-dict `:` functional-type(operands, results) }]; - let verifier = [{ - auto size = extents().size(); - auto shapeTy = getType().dyn_cast(); - assert(shapeTy && "must be a shape type"); - if (shapeTy.getRank() != size) - return emitOpError("shape type rank mismatch"); - return mlir::success(); - }]; + let verifier = "return ::verify(*this);"; let extraClassDeclaration = [{ std::vector getExtents() { diff --git a/flang/lib/Optimizer/Dialect/FIROps.cpp b/flang/lib/Optimizer/Dialect/FIROps.cpp --- a/flang/lib/Optimizer/Dialect/FIROps.cpp +++ b/flang/lib/Optimizer/Dialect/FIROps.cpp @@ -2606,6 +2606,19 @@ return mlir::success(); } +//===----------------------------------------------------------------------===// +// ShapeOp +//===----------------------------------------------------------------------===// + +static mlir::LogicalResult verify(fir::ShapeOp &op) { + auto size = op.extents().size(); + auto shapeTy = op.getType().dyn_cast(); + assert(shapeTy && "must be a shape type"); + if (shapeTy.getRank() != size) + return op.emitOpError("shape type rank mismatch"); + return mlir::success(); +} + //===----------------------------------------------------------------------===// // ShapeShiftOp //===----------------------------------------------------------------------===//