[Mlir-commits] [mlir] [mlir][LLVM] Fix verifier crash for llvm.blockaddress with missing function (PR #181519)
Ayush Kumar Gaur
llvmlistbot at llvm.org
Wed Feb 18 09:16:37 PST 2026
https://github.com/Ayush3941 updated https://github.com/llvm/llvm-project/pull/181519
>From c703f9a029c536814e4bb9cf1c45c558e9797b45 Mon Sep 17 00:00:00 2001
From: Ayush3941 <ayushkgaur1 at gmail.com>
Date: Sat, 14 Feb 2026 20:10:26 -0500
Subject: [PATCH 1/2] [mlir][LLVM] Fix verifier crash for llvm.blockaddress
with missing function symbol
---
mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp | 8 ++++----
mlir/test/Dialect/LLVMIR/invalid.mlir | 7 +++++++
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
index 4c67720654f83..a86777dd602b8 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
@@ -4151,11 +4151,11 @@ LLVMFuncOp BlockAddressOp::getFunction(SymbolTableCollection &symbolTable) {
}
BlockTagOp BlockAddressOp::getBlockTagOp() {
- auto funcOp = dyn_cast<LLVMFuncOp>(mlir::SymbolTable::lookupNearestSymbolFrom(
- parentLLVMModule(*this), getBlockAddr().getFunction()));
- if (!funcOp)
+ Operation *sym = mlir::SymbolTable::lookupNearestSymbolFrom(
+ parentLLVMModule(*this), getBlockAddr().getFunction());
+ if (!sym)
return nullptr;
-
+ auto funcOp = dyn_cast<LLVMFuncOp>(sym);
BlockTagOp blockTagOp = nullptr;
funcOp.walk([&](LLVM::BlockTagOp labelOp) {
if (labelOp.getTag() == getBlockAddr().getTag()) {
diff --git a/mlir/test/Dialect/LLVMIR/invalid.mlir b/mlir/test/Dialect/LLVMIR/invalid.mlir
index 49b6342aea538..b736cde7689ed 100644
--- a/mlir/test/Dialect/LLVMIR/invalid.mlir
+++ b/mlir/test/Dialect/LLVMIR/invalid.mlir
@@ -2065,3 +2065,10 @@ llvm.func @invalid_sincos_gt_2_element_struct_return_type(%f: f32) -> () {
// expected-error at +1 {{op expected result type to be an homogeneous struct with two elements matching the operand type}}
llvm.intr.sincos(%f) : (f32) -> !llvm.struct<(f32, f32, f32)>
}
+
+// -----
+
+module {
+ // expected-error at +1 {{'llvm.blockaddress' op expects an existing block label target in the referenced function}}
+ %0 = llvm.blockaddress <function = @missing_func, tag = <id = 1>> : !llvm.ptr
+}
>From 976036bb991004fd0598040c80ac880a911d99c4 Mon Sep 17 00:00:00 2001
From: Ayush3941 <ayushkgaur1 at gmail.com>
Date: Sat, 14 Feb 2026 20:16:31 -0500
Subject: [PATCH 2/2] [mlir][LLVM] Fix verifier crash for llvm.blockaddress
with missing function symbol v2
---
mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
index a86777dd602b8..d960201e2b3d0 100644
--- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
+++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp
@@ -4156,6 +4156,8 @@ BlockTagOp BlockAddressOp::getBlockTagOp() {
if (!sym)
return nullptr;
auto funcOp = dyn_cast<LLVMFuncOp>(sym);
+ if (!funcOp)
+ return nullptr;
BlockTagOp blockTagOp = nullptr;
funcOp.walk([&](LLVM::BlockTagOp labelOp) {
if (labelOp.getTag() == getBlockAddr().getTag()) {
More information about the Mlir-commits
mailing list