diff --git a/mlir/examples/toy/Ch2/mlir/Dialect.cpp b/mlir/examples/toy/Ch2/mlir/Dialect.cpp --- a/mlir/examples/toy/Ch2/mlir/Dialect.cpp +++ b/mlir/examples/toy/Ch2/mlir/Dialect.cpp @@ -111,13 +111,27 @@ /// similarly to the `build` methods described above. mlir::ParseResult ConstantOp::parse(mlir::OpAsmParser &parser, mlir::OperationState &result) { - mlir::DenseElementsAttr value; - if (parser.parseOptionalAttrDict(result.attributes) || - parser.parseAttribute(value, "value", result.attributes)) - return failure(); + if (parser.parseOptionalAttrDict(result.attributes)) { + return mlir::failure(); + } + + auto attributes = result.attributes.getAttrs(); + if (attributes.size() != 1) { + return mlir::failure(); + } + + auto attribute = attributes.front(); + if (attribute.getName() != "value") { + return mlir::failure(); + } + + auto value = attribute.getValue().dyn_cast(); + if (!value) { + return mlir::failure(); + } result.addTypes(value.getType()); - return success(); + return mlir::success(); } /// The 'OpAsmPrinter' class is a stream that allows for formatting