mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 13:56:22 +08:00
Fix array stride bug
Investigation of using the Python API with an Ada program showed that an array of dynamic types was not being handled properly. I tracked this down to an oddity of how array strides are handled. In gdb, an array stride can be attached to the range type, via the range_bounds object. However, the stride can also be put into the array's first field. From create_range_type_with_stride: else if (bit_stride > 0) TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride; It's hard to be sure why this is done, but I would guess a combination of historical reasons plus a desire (mentioned in a comment somewhere) to avoid modifying the range type. This patch fixes the problem by changing type::bit_stride to understand this convention. It also fixes one spot that reproduces this logic. Regression tested on x86-64 Fedora 32.
This commit is contained in:
@ -1280,13 +1280,7 @@ update_static_array_size (struct type *type)
|
||||
int stride;
|
||||
struct type *element_type;
|
||||
|
||||
/* If the array itself doesn't provide a stride value then take
|
||||
whatever stride the range provides. Don't update BIT_STRIDE as
|
||||
we don't want to place the stride value from the range into this
|
||||
arrays bit size field. */
|
||||
stride = TYPE_FIELD_BITSIZE (type, 0);
|
||||
if (stride == 0)
|
||||
stride = range_type->bit_stride ();
|
||||
stride = type->bit_stride ();
|
||||
|
||||
if (!get_discrete_bounds (range_type, &low_bound, &high_bound))
|
||||
low_bound = high_bound = 0;
|
||||
|
Reference in New Issue
Block a user