[Bug fortran/59438] New: DWARF: Fortran mishandles ALLOCATABLE/ASSOCIATED in debug output

burnus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Dec 9 20:30:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59438

            Bug ID: 59438
           Summary: DWARF: Fortran mishandles ALLOCATABLE/ASSOCIATED in
                    debug output
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org

Reported by Sanimir of Intel, who is working on GDB VLA/Fortran array support.
(See various patches at gdb-patches@ or http://intel-gdb.github.io/)


(a) The DW_AT_allocated/DW_AT_associated is lacking for scalars - including
strings.

For arrays, it is handled via "struct array_descr_info", which is filled via
gfc_get_array_descr_info, via info->allocated and info->associated.



(b) Dynamic strings are wrapped within a DW_TAG_pointer_type
    character(len=:), allocatable :: str
Printing 'str' yields (PTR TO -> ( character*N )) 0xdeadbeef. Unfortunately
gfortran emits a DW_TAG_pointer_type for dynamic strings, which is not the case
for allocatable arrays.
--> Drop pointer_type and add an allocatable predicate so gdb can dereference
the string if it is allowed to.


(c) Allocatable/associated bits are available after stepping over variable
declaration.
   integer, allocatable :: array(:) ! attribute is missing
The above predicates will be initialized _after_ the inferior has passed the
line and thus gdb shows some random state before the line is executed.
--> Hoist the initialization of these bits (assign .False.) into the prologue,
this allows gdb to determine the correct status of the variable at any given
time.



More information about the Gcc-bugs mailing list