[flang][debug] Avoid redundant module info. (#161542)

Fixes https://github.com/llvm/llvm-project/issues/160907.

When a module is just being used and not defined, we generate it with
decl=true. But if the file/line fields are valid, the module is not
merged with the original and is considered different. This patch avoids
setting file/line/scope in such cases.
This commit is contained in:
Abid Qadeer 2025-10-03 10:08:35 +01:00 committed by GitHub
parent cc9c64d525
commit 6c40c76c21
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 2 deletions

View File

@ -285,11 +285,16 @@ mlir::LLVM::DIModuleAttr AddDebugInfoPass::getOrCreateModuleAttr(
if (auto iter{moduleMap.find(name)}; iter != moduleMap.end()) {
modAttr = iter->getValue();
} else {
// When decl is true, it means that module is only being used in this
// compilation unit and it is defined elsewhere. But if the file/line/scope
// fields are valid, the module is not merged with its definition and is
// considered different. So we only set those fields when decl is false.
modAttr = mlir::LLVM::DIModuleAttr::get(
context, fileAttr, scope, mlir::StringAttr::get(context, name),
context, decl ? nullptr : fileAttr, decl ? nullptr : scope,
mlir::StringAttr::get(context, name),
/* configMacros */ mlir::StringAttr(),
/* includePath */ mlir::StringAttr(),
/* apinotes */ mlir::StringAttr(), line, decl);
/* apinotes */ mlir::StringAttr(), decl ? 0 : line, decl);
moduleMap[name] = modAttr;
}
return modAttr;

View File

@ -0,0 +1,13 @@
// RUN: fir-opt --add-debug-info --mlir-print-debuginfo %s | FileCheck %s
module {
func.func @_QQmain() {
%2 = fir.address_of(@_QMmodEvar1) : !fir.ref<i32> loc(#loc1)
%3 = fircg.ext_declare %2 {uniq_name = "_QMmodEvar1"} : (!fir.ref<i32>) -> !fir.ref<i32> loc(#loc1)
return
} loc(#loc1)
fir.global @_QMmodEvar1 : i32 loc(#loc1)
}
#loc1 = loc("test1.f90":1:0)
// CHECK: #llvm.di_module<name = "mod", isDecl = true>