/// the terminator in their custom syntax for brevity.
class ModuleTerminatorOp
: public Op<ModuleTerminatorOp, OpTrait::ZeroOperands, OpTrait::ZeroResult,
- OpTrait::IsTerminator> {
+ OpTrait::HasParent<ModuleOp>::Impl, OpTrait::IsTerminator> {
public:
using Op::Op;
static StringRef getOperationName() { return "module_terminator"; }
-
static void build(Builder *, OperationState *) {}
- LogicalResult verify();
};
//===----------------------------------------------------------------------===//
/// Return body of this module.
Region &ModuleOp::getBodyRegion() { return getOperation()->getRegion(0); }
Block *ModuleOp::getBody() { return &getBodyRegion().front(); }
-
-//===----------------------------------------------------------------------===//
-// Module Terminator Operation.
-//===----------------------------------------------------------------------===//
-
-LogicalResult ModuleTerminatorOp::verify() {
- if (!isa_and_nonnull<ModuleOp>(getOperation()->getParentOp()))
- return emitOpError() << "is expected to terminate a '"
- << ModuleOp::getOperationName() << "' operation";
- return success();
-}
// -----
func @module_op() {
- // expected-error@+1 {{is expected to terminate a 'module' operation}}
+ // expected-error@+1 {{expects parent op 'module'}}
"module_terminator"() : () -> ()
}