[Mlir-commits] [mlir] 6dd5b1e - [MLIR][LLVM] Add error if using incorrect attribute type for specifying LLVM linkage

William S. Moses llvmlistbot at llvm.org
Mon Sep 27 10:24:10 PDT 2021


Author: William S. Moses
Date: 2021-09-27T13:24:05-04:00
New Revision: 6dd5b1e33e041c51549460fbd3364dc7242d60ce

URL: https://github.com/llvm/llvm-project/commit/6dd5b1e33e041c51549460fbd3364dc7242d60ce
DIFF: https://github.com/llvm/llvm-project/commit/6dd5b1e33e041c51549460fbd3364dc7242d60ce.diff

LOG: [MLIR][LLVM] Add error if using incorrect attribute type for specifying LLVM linkage

Address post-commit review in https://reviews.llvm.org/D108524 to add appropriate diagnostics.

Reviewed By: mehdi_amini

Differential Revision: https://reviews.llvm.org/D110566

Added: 
    

Modified: 
    mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
    mlir/test/Conversion/StandardToLLVM/convert-funcs.mlir

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
index 8327492a780f6..1d5577c639001 100644
--- a/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
+++ b/mlir/lib/Conversion/StandardToLLVM/StandardToLLVM.cpp
@@ -266,9 +266,14 @@ struct FuncOpConversionBase : public ConvertOpToLLVMPattern<FuncOp> {
     // functions have linkage.
     LLVM::Linkage linkage = LLVM::Linkage::External;
     if (funcOp->hasAttr("llvm.linkage")) {
-      linkage = funcOp->getAttr("llvm.linkage")
-                    .cast<mlir::LLVM::LinkageAttr>()
-                    .getLinkage();
+      auto attr =
+          funcOp->getAttr("llvm.linkage").dyn_cast<mlir::LLVM::LinkageAttr>();
+      if (!attr) {
+        funcOp->emitError()
+            << "Contains llvm.linkage attribute not of type LLVM::LinkageAttr";
+        return nullptr;
+      }
+      linkage = attr.getLinkage();
     }
     auto newFuncOp = rewriter.create<LLVM::LLVMFuncOp>(
         funcOp.getLoc(), funcOp.getName(), llvmType, linkage,

diff  --git a/mlir/test/Conversion/StandardToLLVM/convert-funcs.mlir b/mlir/test/Conversion/StandardToLLVM/convert-funcs.mlir
index fa60fcd1bd83c..51f4b9aa71fe0 100644
--- a/mlir/test/Conversion/StandardToLLVM/convert-funcs.mlir
+++ b/mlir/test/Conversion/StandardToLLVM/convert-funcs.mlir
@@ -1,4 +1,4 @@
-// RUN: mlir-opt -convert-std-to-llvm %s | FileCheck %s
+// RUN: mlir-opt -convert-std-to-llvm -split-input-file -verify-diagnostics %s | FileCheck %s
 
 //CHECK: llvm.func @second_order_arg(!llvm.ptr<func<void ()>>)
 func private @second_order_arg(%arg0 : () -> ())
@@ -62,3 +62,6 @@ func @indirect_call(%arg0: (f32) -> i32, %arg1: f32) -> i32 {
   return %0 : i32
 }
 
+// -----
+
+func private @badllvmlinkage(i32) attributes { "llvm.linkage" = 3 : i64 } // expected-error {{Contains llvm.linkage attribute not of type LLVM::LinkageAttr}}


        


More information about the Mlir-commits mailing list