diff --git a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp index 46e2e7f2ba5dc..2de5e372d88c0 100644 --- a/mlir/lib/Target/LLVMIR/DebugTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/DebugTranslation.cpp @@ -352,7 +352,8 @@ llvm::DINode *DebugTranslation::translate(DINodeAttr attr) { DISubroutineTypeAttr>( [&](auto attr) { return translateImpl(attr); }); - attrToNode.insert({attr, node}); + if (node && !node->isTemporary()) + attrToNode.insert({attr, node}); return node; } diff --git a/mlir/test/Target/LLVMIR/llvmir-debug.mlir b/mlir/test/Target/LLVMIR/llvmir-debug.mlir index f4c18bf6bd53c..8ab1a1b290dad 100644 --- a/mlir/test/Target/LLVMIR/llvmir-debug.mlir +++ b/mlir/test/Target/LLVMIR/llvmir-debug.mlir @@ -442,12 +442,16 @@ llvm.mlir.global @global_variable() {dbg_expr = #di_global_variable_expression} #di_subprogram = #llvm.di_subprogram #di_composite_type = #llvm.di_composite_type, scope = #di_subprogram> -#di_global_variable = #llvm.di_global_variable +// Use the inner type standalone outside too. Ensures it's not cached wrong. +#di_var_type = #llvm.di_subroutine_type +#di_global_variable = #llvm.di_global_variable #di_global_variable_expression = #llvm.di_global_variable_expression llvm.mlir.global @global_variable() {dbg_expr = #di_global_variable_expression} : !llvm.struct<()> -// CHECK: distinct !DIGlobalVariable({{.*}}type: ![[COMP:[0-9]+]], +// CHECK: distinct !DIGlobalVariable({{.*}}type: ![[VAR:[0-9]+]], +// CHECK: ![[VAR]] = !DISubroutineType(types: ![[COMPS:[0-9]+]]) +// CHECK: ![[COMPS]] = !{![[COMP:[0-9]+]], // CHECK: ![[COMP]] = distinct !DICompositeType({{.*}}scope: ![[SCOPE:[0-9]+]], // CHECK: ![[SCOPE]] = !DISubprogram({{.*}}type: ![[SUBROUTINE:[0-9]+]], // CHECK: ![[SUBROUTINE]] = !DISubroutineType(types: ![[SR_TYPES:[0-9]+]])