From eb22971bfb84b05be5e3cbc8691bf70314e0097c Mon Sep 17 00:00:00 2001 From: Kiung Jung Date: Thu, 27 Apr 2023 15:52:59 +0000 Subject: [PATCH] [MLIR][EmitC] Add empty emitc.constant check Implementing logic to check if the emitc dialect constant Op is empty. Reviewed By: marbre Differential Revision: https://reviews.llvm.org/D147907 --- mlir/include/mlir/Dialect/EmitC/IR/EmitC.td | 1 - mlir/lib/Dialect/EmitC/IR/EmitC.cpp | 5 +++++ mlir/test/Dialect/EmitC/invalid_ops.mlir | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td index b3765b0..4851d96 100644 --- a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td +++ b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td @@ -142,7 +142,6 @@ def EmitC_ConstantOp : EmitC_Op<"constant", [ConstantLike]> { let results = (outs AnyType); let hasFolder = 1; - // TODO: Disallow empty constants. let hasVerifier = 1; } diff --git a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp index fa6919f..7190476 100644 --- a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp +++ b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp @@ -125,6 +125,11 @@ LogicalResult emitc::ConstantOp::verify() { if (getValueAttr().isa()) return success(); + // Value must not be empty + StringAttr strAttr = getValueAttr().dyn_cast(); + if (strAttr && strAttr.getValue().empty()) + return emitOpError() << "value must not be empty"; + auto value = cast(getValueAttr()); Type type = getType(); if (!value.getType().isa() && type != value.getType()) diff --git a/mlir/test/Dialect/EmitC/invalid_ops.mlir b/mlir/test/Dialect/EmitC/invalid_ops.mlir index 421a5fb..377c84e 100644 --- a/mlir/test/Dialect/EmitC/invalid_ops.mlir +++ b/mlir/test/Dialect/EmitC/invalid_ops.mlir @@ -16,6 +16,14 @@ func.func @const_attribute_return_type_2() { // ----- +func.func @empty_constant() { + // expected-error @+1 {{'emitc.constant' op value must not be empty}} + %c0 = "emitc.constant"(){value = ""} : () -> i32 + return +} + +// ----- + func.func @index_args_out_of_range_1() { // expected-error @+1 {{'emitc.call' op index argument is out of range}} emitc.call "test" () {args = [0 : index]} : () -> () -- 2.7.4