This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug debug/84131] New: [8 REGRESSION] FORTRAN dynamical array debug info
- From: "qiyao at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 30 Jan 2018 14:46:20 +0000
- Subject: [Bug debug/84131] New: [8 REGRESSION] FORTRAN dynamical array debug info
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84131
Bug ID: 84131
Summary: [8 REGRESSION] FORTRAN dynamical array debug info
Product: gcc
Version: 8.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: debug
Assignee: unassigned at gcc dot gnu.org
Reporter: qiyao at gcc dot gnu.org
Target Milestone: ---
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 gfortran 8.0.1 20180130, 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.1. This difference
causes many gdb.fortran tests fail.