This issue is present in GDB 7.3, gdb 7.4, gdb 7.5 It was not present in 7.2 Compile using free-pascal (-gw creates dwarf 2) fpc.exe -gw Array.pas program Foo; type TByteArray = array[0..191] of integer; var a: TByteArray; begin a[1] := 0; end. execute in gdb: ptype TByteArray type = array [0..-65] of SMALLINT But it should be 0..191 OBJDUMP -w shows <2><95>: Abbrev Number: 6 (DW_TAG_subrange_type) <96> DW_AT_lower_bound : 0 <97> DW_AT_upper_bound : 191 <99> DW_AT_stride : 2 <9a> DW_AT_type : <0xc3> <1><c3>: Abbrev Number: 4 (DW_TAG_typedef) <c4> DW_AT_name : BYTE <c9> DW_AT_type : <0xcd> <1><cd>: Abbrev Number: 8 (DW_TAG_base_type) <ce> DW_AT_name : BYTE <d3> DW_AT_encoding : 7 (unsigned) <d4> DW_AT_byte_size : 1 The basetype is clearly marked unsigned.
Testing a patch. The bug is that the subrange type code in dwarf2read.c doesn't strip typedefs, so it doesn't see that the range type is unsigned.
CVSROOT: /cvs/src Module name: src Changes by: tromey@sourceware.org 2013-02-18 21:04:28 Modified files: gdb : ChangeLog dwarf2read.c gdb/testsuite : ChangeLog Added files: gdb/testsuite/gdb.dwarf2: subrange.exp Log message: PR gdb/15102: * dwarf2read.c (read_subrange_type): Use result of 'check_typedef'. gdb/testsuite * gdb.dwarf2/subrange.exp: New file. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.15160&r2=1.15161 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/dwarf2read.c.diff?cvsroot=src&r1=1.753&r2=1.754 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&r1=1.3564&r2=1.3565 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.dwarf2/subrange.exp.diff?cvsroot=src&r1=NONE&r2=1.1
Fixed.