Different dynamical array debug info 7.2 vs. 8.0

Yao Qi <[email protected]>
Newsgroups gmane.comp.gcc.fortran,gmane.comp.gcc.devel,gmane.comp.gdb.devel
Message-ID <[email protected]>
Hi,
I observed that gfortran 7.2 and 8.0 generate different debug info for
dynamical array.  Here is a case simplified from gdb test case
gdb.fortran/vla-datatypes.f90

$ cat vla-datatypes.f90 
program vla_primitives
  integer, allocatable    :: intvla(:, :, :)
  logical                 :: l

  allocate (intvla (11,22,33))

  l = allocated(intvla)                   ! vlas-allocated
  intvla(:,:,:) = 1
  intvla(5,5,5) = 42                      ! vlas-initialized
end program vla_primitives


In gcc 8.0, the intvla debug info is,

 <2><b2>: Abbrev Number: 10 (DW_TAG_variable)
    <b3>   DW_AT_name        : (indirect string, offset: 0xcb): intvla
    <b7>   DW_AT_decl_file   : 1
    <b8>   DW_AT_decl_line   : 2
    <b9>   DW_AT_type        : <0x127>
    <bd>   DW_AT_location    : 3 byte block: 91 e0 7e   (DW_OP_fbreg: -160)

 <1><127>: Abbrev Number: 14 (DW_TAG_array_type)
    <128>   DW_AT_ordering    : 1       (column major)
    <129>   DW_AT_data_location: 4 byte block: 97 23 8 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 8; DW_OP_deref)
    <12e>   DW_AT_allocated   : 6 byte block: 97 23 8 6 30 2e   (DW_OP_push_object_address; DW_OP_plus_uconst: 8; DW_OP_deref; DW_OP_lit0; DW_OP_ne)
    <135>   DW_AT_type        : <0x7b>
    <139>   DW_AT_sibling     : <0x174>
 <2><13d>: Abbrev Number: 15 (DW_TAG_subrange_type)
    <13e>   DW_AT_lower_bound : 4 byte block: 97 23 28 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 40; DW_OP_deref)
    <143>   DW_AT_upper_bound : 4 byte block: 97 23 30 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 48; DW_OP_deref)
    <148>   DW_AT_byte_stride : 6 byte block: 97 23 20 6 34 1e  (DW_OP_push_object_address; DW_OP_plus_uconst: 32; DW_OP_deref; DW_OP_lit4; DW_OP_mul)
 <2><14f>: Abbrev Number: 15 (DW_TAG_subrange_type)
    <150>   DW_AT_lower_bound : 4 byte block: 97 23 40 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 64; DW_OP_deref)
    <155>   DW_AT_upper_bound : 4 byte block: 97 23 48 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 72; DW_OP_deref)
    <15a>   DW_AT_byte_stride : 6 byte block: 97 23 38 6 34 1e  (DW_OP_push_object_address; DW_OP_plus_uconst: 56; DW_OP_deref; DW_OP_lit4; DW_OP_mul)
 <2><161>: Abbrev Number: 15 (DW_TAG_subrange_type)
    <162>   DW_AT_lower_bound : 4 byte block: 97 23 58 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 88; DW_OP_deref)
    <167>   DW_AT_upper_bound : 4 byte block: 97 23 60 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 96; DW_OP_deref)
    <16c>   DW_AT_byte_stride : 6 byte block: 97 23 50 6 34 1e  (DW_OP_push_object_address; DW_OP_plus_uconst: 80; DW_OP_deref; DW_OP_lit4; DW_OP_mul)
 <2><173>: Abbrev Number: 0

In gcc 7.2, it is,

 <2><b2>: Abbrev Number: 10 (DW_TAG_variable)
    <b3>   DW_AT_name        : (indirect string, offset: 0x12): intvla
    <b7>   DW_AT_decl_file   : 1
    <b8>   DW_AT_decl_line   : 2
    <b9>   DW_AT_type        : <0x127>
    <bd>   DW_AT_location    : 3 byte block: 91 e0 7e   (DW_OP_fbreg: -160)

 <1><127>: Abbrev Number: 14 (DW_TAG_array_type)
    <128>   DW_AT_ordering    : 1       (column major)
    <129>   DW_AT_data_location: 2 byte block: 97 6     (DW_OP_push_object_address; DW_OP_deref)
    <12c>   DW_AT_allocated   : 4 byte block: 97 6 30 2e        (DW_OP_push_object_address; DW_OP_deref; DW_OP_lit0; DW_OP_ne)
    <131>   DW_AT_type        : <0x7b>
    <135>   DW_AT_sibling     : <0x170>
 <2><139>: Abbrev Number: 15 (DW_TAG_subrange_type)
    <13a>   DW_AT_lower_bound : 4 byte block: 97 23 20 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 32; DW_OP_deref)
    <13f>   DW_AT_upper_bound : 4 byte block: 97 23 28 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 40; DW_OP_deref)
    <144>   DW_AT_byte_stride : 6 byte block: 97 23 18 6 34 1e  (DW_OP_push_object_address; DW_OP_plus_uconst: 24; DW_OP_deref; DW_OP_lit4; DW_OP_mul)
 <2><14b>: Abbrev Number: 15 (DW_TAG_subrange_type)
    <14c>   DW_AT_lower_bound : 4 byte block: 97 23 38 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 56; DW_OP_deref)
    <151>   DW_AT_upper_bound : 4 byte block: 97 23 40 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 64; DW_OP_deref)
    <156>   DW_AT_byte_stride : 6 byte block: 97 23 30 6 34 1e  (DW_OP_push_object_address; DW_OP_plus_uconst: 48; DW_OP_deref; DW_OP_lit4; DW_OP_mul)
 <2><15d>: Abbrev Number: 15 (DW_TAG_subrange_type)
    <15e>   DW_AT_lower_bound : 4 byte block: 97 23 50 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 80; DW_OP_deref)
    <163>   DW_AT_upper_bound : 4 byte block: 97 23 58 6        (DW_OP_push_object_address; DW_OP_plus_uconst: 88; DW_OP_deref)
    <168>   DW_AT_byte_stride : 6 byte block: 97 23 48 6 34 1e  (DW_OP_push_object_address; DW_OP_plus_uconst: 72; DW_OP_deref; DW_OP_lit4; DW_OP_mul)
 <2><16f>: Abbrev Number:

Attributes DW_AT_data_location and DW_AT_allocated are different.  There
is an extra "DW_OP_plus_uconst: 8" generated by gcc 8.0.  Is it
intended or expected?  gfortran 8.0 causes many gdb.fotran vla-related
tests fail, but gfortran 7.2 doesn't.  That is why I took a look at the
debug information.

-- 
Yao (齐尧)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.