gdb/fortran: Support negative array stride in one limited case
authorAndrew Burgess <andrew.burgess@embecosm.com>
Sat, 18 Jan 2020 22:38:29 +0000 (22:38 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 25 Feb 2020 16:03:22 +0000 (16:03 +0000)
commit9e80cfa14ed0bdec20361ae78e74ccb937de3428
treeaa831e6bb05b27a4bf20cb60824cb65ae3c9635f
parent09624f1fece637e17c0c31f6b7589466402ea407
gdb/fortran: Support negative array stride in one limited case

This commit adds support for negative Fortran array strides in one
limited case, that is the case of a single element array with a
negative array stride.

The changes in this commit will be required in order for more general
negative array stride support to work correctly, however, right now
other problems in GDB prevent negative array strides from working in
the general case.

The reason negative array strides don't currently work in the general
case is that when dealing with such arrays, the base address for the
objects data is actually the highest addressed element, subsequent
elements are then accessed with a negative offset from that address,
and GDB is not currently happy with this configuration.

The changes here can be summarised as, stop treating signed values as
unsigned, specifically, the array stride, and offsets calculated using
the array stride.

This issue was identified on the mailing list by Sergio:

  https://sourceware.org/ml/gdb-patches/2020-01/msg00360.html

The test for this issue is a new one written by me as the copyright
status of the original test is currently unknown.

gdb/ChangeLog:

* gdbtypes.c (create_array_type_with_stride): Handle negative
array strides.
* valarith.c (value_subscripted_rvalue): Likewise.

gdb/testsuite/ChangeLog:

* gdb.fortran/derived-type-striding.exp: Add a new test.
* gdb.fortran/derived-type-striding.f90: Add pointer variable for
new test.
gdb/ChangeLog
gdb/gdbtypes.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.fortran/derived-type-striding.exp
gdb/testsuite/gdb.fortran/derived-type-striding.f90
gdb/valarith.c