<div dir="ltr">Hello Everyone,<div><br></div><div>For a typical Fortran program compiled with flang with -g(debuginfo enabled), I'm noticing *DW_TAG_lexical_block* is getting created as child of the *DW_TAG_subprogram*.</div><div>As a consequence of this debuggers like GDB  is not able to show the arguments of the subprogram.</div><div>Program snippet -</div><div>subroutine sub(foo)<br>        integer, value :: foo<br>        print*,foo<br>      end subroutine<br>program main<br>      interface<br>        subroutine sub(a)<br>              integer, value :: a<br>         end subroutine<br>      end interface<br>             call sub(11)<br> end program<br></div><div>--------------------------------</div><div>Snippet from GDB --</div><div>Breakpoint 1, sub () at test.f90:1<br>1             subroutine sub(foo)<br>(gdb) info args<br>No arguments.<br></div><div>-----------------------------------</div><div>Furthermore, *DW_TAG_formal_parameter* is created as a child of this *DW_TAG_lexical_scope*. Hence GDB is showing arguments of the subprogram as locals variables. </div><div>Snippet DWARF--<br></div><div>0x0000002f:   DW_TAG_subprogram</div><div>DW_AT_name      ("sub")</div><div> DW_AT_low_pc    (0x00000000004011b0)<br> DW_AT_high_pc   (0x0000000000401245<br>.....<br>0x00000049:     DW_TAG_lexical_block</div><div> DW_AT_low_pc    (0x00000000004011b0)<br> DW_AT_high_pc   (0x0000000000401245<br> ....<br>0x0000005a:       DW_TAG_formal_parameter</div><div>  DW_AT_name      ("foo")  </div><div><div>0x0000005a:       DW_TAG_variable</div><div>  DW_AT_name      ("foo")  </div></div><div>...</div><div>---------------------------------------</div><div>Is this behavior intended ?</div><div><br></div><div>Anyone working on this area, Please share your understanding on this!</div><div><br></div><div><div>*Please note here that same hierarchy of debug info is also present at LLVM IR level, hence the final DWARF is shared here. <br></div><div><br></div><div>Thank You,</div><div>Sourabh.</div></div></div>