https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94070
sandra at gcc dot gnu.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |sandra at gcc dot
gnu.org
--- Comment #8 from sandra at gcc dot gnu.org ---
In gfc_desc_to_cfi_desc (in libgfortran/runtime/ISO_Fortran_binding.c):
/* Assumed size arrays have gfc ubound == 0 and CFI extent = -1. */
if (n == GFC_DESCRIPTOR_RANK (s) - 1
&& GFC_DESCRIPTOR_LBOUND(s, n) == 1
&& GFC_DESCRIPTOR_UBOUND(s, n) == 0)
d->dim[n].extent = -1;
else
d->dim[n].extent = (CFI_index_t)GFC_DESCRIPTOR_UBOUND(s, n)
- (CFI_index_t)GFC_DESCRIPTOR_LBOUND(s, n) + 1;
The comment and test are only correct if the lower bound of the array dimension
either defaults to 1 or is explicitly specified as 1. It does appear that the
ubound == 0 part is true, but this means e.g. an array dimension specified as
-3:* is indistinguishable from -3:0.
I think this needs to be corrected at the point where the GFC descriptor is
created; perhaps set ubound = lbound - 1? Or also set lbound = 1 as the code
snippet above checks? Assumed-size arrays can't be pointers or allocatable so
their bounds don't need to be preserved across calls, but maybe GFC descriptors
are used for other purposes where it matters?