[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