Issue 120317
Summary [flang][debug] Missing renamed module variable
Labels flang
Assignees
Reporter jieljiel
    Example code,
```
module mod1
  integer :: a = 1, b = 2 
end module

subroutine sub1()
  use mod1, foo => a
  print *, foo, b
end subroutine

subroutine sub2()
  use mod1, only : bar => b
  print *, bar
end subroutine
```

With flang, no DW_TAG_variable is generated for `foo` and `bar`.

Proposed solution is to insert metadata nodes of `DIImportedEntity` with `tag:` field to be `DW_TAG_imported_declaration` and `name:` field to be tha variable's name, e.g.
```
!23 = !DIImportedEntity(tag: DW_TAG_imported_declaration, entity: !13, scope: !22, file: !3, line: 5, name: "foo")
!30 = !DIImportedEntity(tag: DW_TAG_imported_declaration, entity: !16, scope: !29, file: !3, line: 10, name: "bar")
```
By looking into the DWARF from gfortran, with or without `only`, the scope could be different though, either belong to the subprogram or the imported module.

```
 <1><2f>: Abbrev Number: 4 (DW_TAG_module)
    <30> DW_AT_name        : (indirect string, offset: 0x10): mod1
...
 <1><6f>: Abbrev Number: 6 (DW_TAG_subprogram)
    <70>   DW_AT_external    : 1
 <70>   DW_AT_name        : (indirect string, offset: 0xef): sub1
...
 <2><91>: Abbrev Number: 7 (DW_TAG_imported_module)
...
    <95> DW_AT_import      : <0x2f>	[Abbrev Number: 4 (DW_TAG_module)]
 <3><99>: Abbrev Number: 2 (DW_TAG_imported_declaration)
...
    <9c>   DW_AT_name : foo
    <a0>   DW_AT_import      : <0x3b>	[Abbrev Number: 1 (DW_TAG_variable)]
...
 <1><a6>: Abbrev Number: 8 (DW_TAG_subprogram)
 <a7>   DW_AT_external    : 1
    <a7>   DW_AT_name        : (indirect string, offset: 0xf4): sub2
...
 <2><c4>: Abbrev Number: 2 (DW_TAG_imported_declaration)
...
    <c7>   DW_AT_name        : bar
 <cb>   DW_AT_import      : <0x51>	[Abbrev Number: 1 (DW_TAG_variable)]
```

_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to