[Mlir-commits] [mlir] 50ae8a0 - [MLIR][LLVM] Fix a crash in ensure-debug-info-scope-on-llvm-func (#178337)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Jan 29 23:53:33 PST 2026


Author: Peter Hawkins
Date: 2026-01-30T08:53:28+01:00
New Revision: 50ae8a041cf94ceed13655a0d93ad76fc36f9721

URL: https://github.com/llvm/llvm-project/commit/50ae8a041cf94ceed13655a0d93ad76fc36f9721
DIFF: https://github.com/llvm/llvm-project/commit/50ae8a041cf94ceed13655a0d93ad76fc36f9721.diff

LOG: [MLIR][LLVM] Fix a crash in ensure-debug-info-scope-on-llvm-func (#178337)

This pass was not defensive enough about the presence of non-llvm
functions with call site locs.

Added: 
    

Modified: 
    mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp
    mlir/test/Dialect/LLVMIR/add-debuginfo-func-scope.mlir

Removed: 
    


################################################################################
diff  --git a/mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp b/mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp
index 12dd22581a979..36b31ffc3970e 100644
--- a/mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp
+++ b/mlir/lib/Dialect/LLVMIR/Transforms/DIScopeForLLVMFuncOp.cpp
@@ -120,11 +120,13 @@ static void setLexicalBlockFileAttr(Operation *op) {
     LLVM::DIScopeAttr scopeAttr;
     // We assemble the full inline stack so the parent of this loc must be a
     // function
-    auto funcOp = op->getParentOfType<LLVM::LLVMFuncOp>();
-    if (auto funcOpLoc = llvm::dyn_cast_if_present<FusedLoc>(funcOp.getLoc())) {
-      scopeAttr = cast<LLVM::DISubprogramAttr>(funcOpLoc.getMetadata());
-      op->setLoc(
-          CallSiteLoc::get(getNestedLoc(op, scopeAttr, calleeLoc), callerLoc));
+    if (auto funcOp = op->getParentOfType<LLVM::LLVMFuncOp>()) {
+      if (auto funcOpLoc =
+              llvm::dyn_cast_if_present<FusedLoc>(funcOp.getLoc())) {
+        scopeAttr = cast<LLVM::DISubprogramAttr>(funcOpLoc.getMetadata());
+        op->setLoc(CallSiteLoc::get(getNestedLoc(op, scopeAttr, calleeLoc),
+                                    callerLoc));
+      }
     }
 
     return;

diff  --git a/mlir/test/Dialect/LLVMIR/add-debuginfo-func-scope.mlir b/mlir/test/Dialect/LLVMIR/add-debuginfo-func-scope.mlir
index ffeb871d56c6c..895c3fcb7fb23 100644
--- a/mlir/test/Dialect/LLVMIR/add-debuginfo-func-scope.mlir
+++ b/mlir/test/Dialect/LLVMIR/add-debuginfo-func-scope.mlir
@@ -160,3 +160,15 @@ module {
   } loc(#loc)
 } loc(unknown)
 
+
+// -----
+
+// Test that operations with CallSiteLoc outside of an llvm.func do not crash.
+llvm.func @dummy()
+func.func @test_func() {
+  return
+} loc(#loc2)
+
+#loc = loc("a.py":1150:34)
+#loc1 = loc("b.py":321:17)
+#loc2 = loc(callsite(#loc at #loc1))


        


More information about the Mlir-commits mailing list