From: Kai Sasaki Date: Sat, 22 Apr 2023 03:39:50 +0000 (+0900) Subject: [mlir] Check FunctionOpInterface castable type X-Git-Tag: upstream/17.0.6~10740 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e5f8cdd68527b718ecfcc4724e3358b34e5014e5;p=platform%2Fupstream%2Fllvm.git [mlir] Check FunctionOpInterface castable type As convertFuncOpTypes does not support other FuncOpInterface types, we should check the type to avoid assertion failure. The original issue was reported https://github.com/llvm/llvm-project/issues/61858. Reviewed By: mehdi_amini Differential Revision: https://reviews.llvm.org/D148873 --- diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp index f5e9e71..f812d4d 100644 --- a/mlir/lib/Transforms/Utils/DialectConversion.cpp +++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp @@ -3065,7 +3065,9 @@ std::optional TypeConverter::convertTypeAttribute(Type type, static LogicalResult convertFuncOpTypes(FunctionOpInterface funcOp, TypeConverter &typeConverter, ConversionPatternRewriter &rewriter) { - FunctionType type = funcOp.getFunctionType().cast(); + FunctionType type = dyn_cast(funcOp.getFunctionType()); + if (!type) + return failure(); // Convert the original function types. TypeConverter::SignatureConversion result(type.getNumInputs()); diff --git a/mlir/test/Transforms/test-legalize-type-conversion.mlir b/mlir/test/Transforms/test-legalize-type-conversion.mlir index 0649273..b35cda8 100644 --- a/mlir/test/Transforms/test-legalize-type-conversion.mlir +++ b/mlir/test/Transforms/test-legalize-type-conversion.mlir @@ -121,3 +121,11 @@ func.func @recursive_type_conversion() { "test.type_producer"() : () -> !test.test_rec> return } + +// ----- + +// CHECK-LABEL: @unsupported_func_op_interface +llvm.func @unsupported_func_op_interface() { + // CHECK: llvm.return + llvm.return +}