[Mlir-commits] [mlir] 5cac85c - [mlir] Check for type conversion success in std->llvm function conversion
Alex Zinenko
llvmlistbot at llvm.org
Mon Sep 14 04:16:49 PDT 2020
Author: Alex Zinenko
Date: 2020-09-14T13:16:42+02:00
New Revision: 5cac85c931d95f3c94f79837a3bf406eb68edaeb
URL: https://github.com/llvm/llvm-project/commit/5cac85c931d95f3c94f79837a3bf406eb68edaeb
DIFF: https://github.com/llvm/llvm-project/commit/5cac85c931d95f3c94f79837a3bf406eb68edaeb.diff
LOG: [mlir] Check for type conversion success in std->llvm function conversion
Type converter may fail and return nullptr on unconvertible types. The function
conversion did not include a check and was attempting to use a nullptr type to
construct an LLVM function, leading to a crash. Add a check and return early.
The rest of the call stack propagates errors properly.
Fixes PR47403.
Reviewed By: mehdi_amini
Differential Revision: https://reviews.llvm.org/D87075
Added:
Modified:
mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
mlir/test/Conversion/StandardToLLVM/invalid.mlir
Removed:
################################################################################
diff --git a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
index 2aa589a0fb7b2..62b787153d84b 100644
--- a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
+++ b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
@@ -1112,6 +1112,8 @@ struct FuncOpConversionBase : public ConvertOpToLLVMPattern<FuncOp> {
TypeConverter::SignatureConversion result(funcOp.getNumArguments());
auto llvmType = typeConverter.convertFunctionSignature(
funcOp.getType(), varargsAttr && varargsAttr.getValue(), result);
+ if (!llvmType)
+ return nullptr;
// Propagate argument attributes to all converted arguments obtained after
// converting a given original argument.
diff --git a/mlir/test/Conversion/StandardToLLVM/invalid.mlir b/mlir/test/Conversion/StandardToLLVM/invalid.mlir
index 469bb9753ec49..5f79cef68ba8e 100644
--- a/mlir/test/Conversion/StandardToLLVM/invalid.mlir
+++ b/mlir/test/Conversion/StandardToLLVM/invalid.mlir
@@ -29,3 +29,8 @@ func @mlir_cast_to_llvm_vec(%0 : vector<1x1xf32>) -> !llvm.vec<1 x float> {
%1 = llvm.mlir.cast %0 : vector<1x1xf32> to !llvm.vec<1 x float>
return %1 : !llvm.vec<1 x float>
}
+
+// -----
+
+// Should not crash on unsupported types in function signatures.
+func @unsupported_signature() -> tensor<10 x i32>
More information about the Mlir-commits
mailing list