Skip to content

Commit f6f4c17

Browse files
authored
[flang][debug] Use PROGRAM name for main function name (#111022)
For example, in PROGRAM test_program ... END PROGRAM This allows a user to break on the main function with `break test_program`. This matches what classic flang and gfortran do.
1 parent c734d77 commit f6f4c17

File tree

5 files changed

+13
-4
lines changed

5 files changed

+13
-4
lines changed

flang/lib/Optimizer/Transforms/AddDebugInfo.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "flang/Optimizer/CodeGen/CGOps.h"
1919
#include "flang/Optimizer/Dialect/FIRDialect.h"
2020
#include "flang/Optimizer/Dialect/FIROps.h"
21+
#include "flang/Optimizer/Dialect/FIROpsSupport.h"
2122
#include "flang/Optimizer/Dialect/FIRType.h"
2223
#include "flang/Optimizer/Dialect/Support/FIRContext.h"
2324
#include "flang/Optimizer/Support/InternalNames.h"
@@ -265,6 +266,14 @@ void AddDebugInfoPass::handleFuncOp(mlir::func::FuncOp funcOp,
265266
auto result = fir::NameUniquer::deconstruct(funcName);
266267
funcName = mlir::StringAttr::get(context, result.second.name);
267268

269+
// try to use a better function name than _QQmain for the program statement
270+
if (funcName == fir::NameUniquer::doProgramEntry()) {
271+
mlir::StringAttr bindcName =
272+
funcOp->getAttrOfType<mlir::StringAttr>(fir::getSymbolAttrName());
273+
if (bindcName)
274+
funcName = bindcName;
275+
}
276+
268277
llvm::SmallVector<mlir::LLVM::DITypeAttr> types;
269278
for (auto resTy : funcOp.getResultTypes()) {
270279
auto tyAttr =

flang/test/Integration/debug-local-var-2.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
! BOTH-LABEL: }
5454

5555
program mn
56-
! BOTH-DAG: ![[MAIN:.*]] = distinct !DISubprogram(name: "_QQmain", {{.*}})
56+
! BOTH-DAG: ![[MAIN:.*]] = distinct !DISubprogram(name: "mn", {{.*}})
5757

5858
! BOTH-DAG: ![[TYI32:.*]] = !DIBasicType(name: "integer", size: 32, encoding: DW_ATE_signed)
5959
! BOTH-DAG: ![[TYI64:.*]] = !DIBasicType(name: "integer", size: 64, encoding: DW_ATE_signed)

flang/test/Transforms/debug-fn-info.fir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<>} {
7676
// CHECK: #[[TY3:.*]] = #llvm.di_subroutine_type<callingConvention = DW_CC_normal, types = #di_null_type, #[[INT4]]>
7777

7878
// Line numbers should match the number in corresponding loc entry.
79-
// CHECK: #llvm.di_subprogram<{{.*}}name = "_QQmain", linkageName = "_QQmain", file = {{.*}}, line = 15, scopeLine = 15, subprogramFlags = Definition, type = #[[TY0]]>
79+
// CHECK: #llvm.di_subprogram<{{.*}}name = "mn", linkageName = "_QQmain", file = {{.*}}, line = 15, scopeLine = 15, subprogramFlags = Definition, type = #[[TY0]]>
8080
// CHECK: #llvm.di_subprogram<{{.*}}name = "fn1", linkageName = "_QFPfn1", file = {{.*}}, line = 26, scopeLine = 26, subprogramFlags = Definition, type = #[[TY1]]>
8181
// CHECK: #llvm.di_subprogram<{{.*}}name = "fn2", linkageName = "_QFPfn2", file = {{.*}}, line = 43, scopeLine = 43, subprogramFlags = Definition, type = #[[TY2]]>
8282
// CHECK: #llvm.di_subprogram<{{.*}}name = "fn3", linkageName = "_QFPfn3", file = {{.*}}, line = 53, scopeLine = 53, subprogramFlags = Definition, type = #[[TY3]]>

flang/test/Transforms/debug-local-global-storage-1.fir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<i64, dense<64> :
4444

4545
// CHECK-DAG: #[[CU:.*]] = #llvm.di_compile_unit<{{.*}}>
4646
// CHECK-DAG: #[[MOD:.*]] = #llvm.di_module<{{.*}}scope = #[[CU]]{{.*}}name = "example"{{.*}}>
47-
// CHECK-DAG: #[[SP:.*]] = #llvm.di_subprogram<{{.*}}name = "_QQmain"{{.*}}>
47+
// CHECK-DAG: #[[SP:.*]] = #llvm.di_subprogram<{{.*}}name = "test"{{.*}}>
4848
// CHECK-DAG: #[[MOD_SP:.*]] = #llvm.di_subprogram<{{.*}}name = "mod_sub"{{.*}}retainedNodes = {{.*}}>
4949
// CHECK-DAG: #llvm.di_global_variable<scope = #[[SP]], name = "arr"{{.*}}line = 22{{.*}}>
5050
// CHECK-DAG: #llvm.di_global_variable<scope = #[[SP]], name = "s"{{.*}}line = 23{{.*}}>

flang/test/Transforms/debug-local-var.fir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<>} {
7777
// CHECK-DAG: #[[LOG1:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "logical", sizeInBits = 8, encoding = DW_ATE_boolean>
7878
// CHECK-DAG: #[[REAL4:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "real", sizeInBits = 32, encoding = DW_ATE_float>
7979
// CHECK-DAG: #[[LOG4:.*]] = #llvm.di_basic_type<tag = DW_TAG_base_type, name = "logical", sizeInBits = 32, encoding = DW_ATE_boolean>
80-
// CHECK-DAG: #[[MAIN:.*]] = #llvm.di_subprogram<{{.*}}name = "_QQmain"{{.*}}>
80+
// CHECK-DAG: #[[MAIN:.*]] = #llvm.di_subprogram<{{.*}}name = "mn"{{.*}}>
8181
// CHECK-DAG: #[[FN1:.*]] = #llvm.di_subprogram<{{.*}}name = "fn1"{{.*}}>
8282
// CHECK-DAG: #[[FN2:.*]] = #llvm.di_subprogram<{{.*}}name = "fn2"{{.*}}>
8383

0 commit comments

Comments
 (0)