[Bug fortran/94578] Incorrect assignment of RESHAPE() result to a Fortran pointer
tkoenig at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Apr 17 15:17:19 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94578
--- Comment #9 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Here's what a solution could look like. I am not really sure that this
is the way to go, there may be some corner cases (pointer to an
argument which was passed as a transposed argument?) which this
might get wrong.
diff --git a/libgfortran/generated/maxval_i4.c
b/libgfortran/generated/maxval_i4.c
index abad45b50ae..3a9ed436956 100644
--- a/libgfortran/generated/maxval_i4.c
+++ b/libgfortran/generated/maxval_i4.c
@@ -50,6 +50,7 @@ maxval_i4 (gfc_array_i4 * const restrict retarray,
index_type delta;
index_type dim;
int continue_loop;
+ int ret_factor;
/* Make dim zero based to avoid confusion. */
rank = GFC_DESCRIPTOR_RANK (array) - 1;
@@ -112,6 +113,7 @@ maxval_i4 (gfc_array_i4 * const restrict retarray,
return;
}
+ ret_factor = 1;
}
else
{
@@ -124,12 +126,16 @@ maxval_i4 (gfc_array_i4 * const restrict retarray,
if (unlikely (compile_options.bounds_check))
bounds_ifunction_return ((array_t *) retarray, extent,
"return value", "MAXVAL");
+ if (retarray->span != 0)
+ ret_factor = retarray->span / sizeof(GFC_INTEGER_4);
+ else
+ ret_factor = 1;
}
for (n = 0; n < rank; n++)
{
count[n] = 0;
- dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n);
+ dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n) * ret_factor;
if (extent[n] <= 0)
return;
}
More information about the Gcc-bugs
mailing list