https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77865

            Bug ID: 77865
           Summary: Regression: wrong debug information for gfortran
                    pointers to structures
           Product: gcc
           Version: 6.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nikolay.piskun at roguewave dot com
  Target Milestone: ---

Created attachment 39757
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=39757&action=edit
Test  program

Here is example of code that generate wrong debug information
type small_stride
      character*40 long_string
      integer      small_pad
end type small_stride

character*40, pointer, dimension(:):: c40pt
type(small_stride), dimension (20), target :: unpleasant
... Initialize unpleasant 
c40pt => unpleasant%long_string

gfortran 5.2 will produce following arrays bounds for c40pt:
<2><307>: Abbrev Number: 26 (DW_TAG_subrange_type)
    <308>   DW_AT_lower_bound : 4 byte block: 97 23 20 6       
(DW_OP_push_object_address; DW_OP_plus_uconst: 32; DW_OP_deref)
    <30d>   DW_AT_upper_bound : 4 byte block: 97 23 28 6       
(DW_OP_push_object_address; DW_OP_plus_uconst: 40; DW_OP_deref)
    <312>   DW_AT_byte_stride : 9 byte block: 97 23 18 6 91 b0 7f 6 1e 
(DW_OP_push_object_address; DW_OP_plus_uconst: 24; DW_OP_deref; DW_OP_fbreg:
-80; DW_OP_deref; DW_OP_mul)

whereas gcc 6.2.0 lacks stride information. 

<2><307>: Abbrev Number: 26 (DW_TAG_subrange_type)
    <308>   DW_AT_lower_bound : 4 byte block: 97 23 20 6       
(DW_OP_push_object_address; DW_OP_plus_uconst: 32; DW_OP_deref)
    <30d>   DW_AT_upper_bound : 4 byte block: 97 23 28 6       
(DW_OP_push_object_address; DW_OP_plus_uconst: 40; DW_OP_deref)

Reply via email to