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.

Reply via email to