[committed] avoid assuming array indices are zero-based (PR 92952)
Martin Sebor
msebor@gmail.com
Tue Dec 17 00:06:00 GMT 2019
On 12/16/19 3:44 PM, Jakub Jelinek wrote:
> On Mon, Dec 16, 2019 at 03:28:29PM -0700, Martin Sebor wrote:
>> PR middle-end/92952 - gfortran.dg/lto/pr87689 FAILs
>>
>> gcc/ChangeLog:
>>
>> PR middle-end/92952
>> * builtins.c (compute_objsize): Adjust offset by the array low bound.
>>
>> Index: gcc/builtins.c
>> ===================================================================
>> --- gcc/builtins.c (revision 279443)
>> +++ gcc/builtins.c (working copy)
>> @@ -3999,6 +3999,16 @@ compute_objsize (tree dest, int ostype, tree *pdec
>> above. */
>> if (TREE_CODE (dest) == ARRAY_REF)
>> {
>> + tree lowbnd = array_ref_low_bound (dest);
>> + if (!integer_zerop (lowbnd) && tree_fits_uhwi_p (lowbnd))
>> + {
>> + /* Adjust the offset by the low bound of the array
>> + domain (normally zero but 1 in Fortran). */
>> + unsigned HOST_WIDE_INT lb = tree_to_uhwi (lowbnd);
>> + offrng[0] -= lb;
>> + offrng[1] -= lb;
>> + }
>
> I don't understand why uhwi is used. offrng is an array of wide_int with
> precision of sizetype, so why not instead:
> if (!integer_zerop (lowbnd) && TREE_CODE (lowbnd) == INTEGER_CST)
> {
> /* Adjust the offset by the low bound of the array
> domain (normally zero but 1 in Fortran). */
> wide_int lb = wi::to_wide (lowbnd, sizprec);
> offrng[0] -= lb;
> offrng[1] -= lb;
> }
> ?
I don't see what difference it makes. They should both do the same
thing. If you just prefer your alternative, feel free to change it.
Martin
More information about the Gcc-patches
mailing list