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; } ? Jakub