https://gcc.gnu.org/g:6d5b905aad35802eec1b5676dbc21c2d5dbd3ac7
commit 6d5b905aad35802eec1b5676dbc21c2d5dbd3ac7 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Wed Aug 20 21:24:42 2025 +0200 Correction régressions cshift_1, cshift_large_1, simplify_cshift_4 Diff: --- libgfortran/generated/cshift0_c10.c | 9 +++++---- libgfortran/generated/cshift0_c16.c | 9 +++++---- libgfortran/generated/cshift0_c17.c | 9 +++++---- libgfortran/generated/cshift0_c4.c | 9 +++++---- libgfortran/generated/cshift0_c8.c | 9 +++++---- libgfortran/generated/cshift0_i1.c | 9 +++++---- libgfortran/generated/cshift0_i16.c | 9 +++++---- libgfortran/generated/cshift0_i2.c | 9 +++++---- libgfortran/generated/cshift0_i4.c | 9 +++++---- libgfortran/generated/cshift0_i8.c | 9 +++++---- libgfortran/generated/cshift0_r10.c | 9 +++++---- libgfortran/generated/cshift0_r16.c | 9 +++++---- libgfortran/generated/cshift0_r17.c | 9 +++++---- libgfortran/generated/cshift0_r4.c | 9 +++++---- libgfortran/generated/cshift0_r8.c | 9 +++++---- libgfortran/m4/cshift0.m4 | 9 +++++---- 16 files changed, 80 insertions(+), 64 deletions(-) diff --git a/libgfortran/generated/cshift0_c10.c b/libgfortran/generated/cshift0_c10.c index a4cf3df20e03..a1dd7ad7495e 100644 --- a/libgfortran/generated/cshift0_c10.c +++ b/libgfortran/generated/cshift0_c10.c @@ -116,8 +116,9 @@ cshift0_c10 (gfc_array_c10 *ret, const gfc_array_c10 *array, ptrdiff_t shift, roffset = sizeof (GFC_COMPLEX_10); soffset = sizeof (GFC_COMPLEX_10); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_COMPLEX_10); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_COMPLEX_10); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_c10 (gfc_array_c10 *ret, const gfc_array_c10 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_COMPLEX_10); size_t len2 = (len - shift) * sizeof (GFC_COMPLEX_10); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_c16.c b/libgfortran/generated/cshift0_c16.c index bd7140d06708..def7bd22f73d 100644 --- a/libgfortran/generated/cshift0_c16.c +++ b/libgfortran/generated/cshift0_c16.c @@ -116,8 +116,9 @@ cshift0_c16 (gfc_array_c16 *ret, const gfc_array_c16 *array, ptrdiff_t shift, roffset = sizeof (GFC_COMPLEX_16); soffset = sizeof (GFC_COMPLEX_16); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_COMPLEX_16); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_COMPLEX_16); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_c16 (gfc_array_c16 *ret, const gfc_array_c16 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_COMPLEX_16); size_t len2 = (len - shift) * sizeof (GFC_COMPLEX_16); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_c17.c b/libgfortran/generated/cshift0_c17.c index dd3e888d7831..b459194aea1e 100644 --- a/libgfortran/generated/cshift0_c17.c +++ b/libgfortran/generated/cshift0_c17.c @@ -116,8 +116,9 @@ cshift0_c17 (gfc_array_c17 *ret, const gfc_array_c17 *array, ptrdiff_t shift, roffset = sizeof (GFC_COMPLEX_17); soffset = sizeof (GFC_COMPLEX_17); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_COMPLEX_17); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_COMPLEX_17); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_c17 (gfc_array_c17 *ret, const gfc_array_c17 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_COMPLEX_17); size_t len2 = (len - shift) * sizeof (GFC_COMPLEX_17); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_c4.c b/libgfortran/generated/cshift0_c4.c index 086abceec2c4..6a50e253a7f3 100644 --- a/libgfortran/generated/cshift0_c4.c +++ b/libgfortran/generated/cshift0_c4.c @@ -116,8 +116,9 @@ cshift0_c4 (gfc_array_c4 *ret, const gfc_array_c4 *array, ptrdiff_t shift, roffset = sizeof (GFC_COMPLEX_4); soffset = sizeof (GFC_COMPLEX_4); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_COMPLEX_4); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_COMPLEX_4); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_c4 (gfc_array_c4 *ret, const gfc_array_c4 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_COMPLEX_4); size_t len2 = (len - shift) * sizeof (GFC_COMPLEX_4); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_c8.c b/libgfortran/generated/cshift0_c8.c index ec1da6753f26..87fe4049d427 100644 --- a/libgfortran/generated/cshift0_c8.c +++ b/libgfortran/generated/cshift0_c8.c @@ -116,8 +116,9 @@ cshift0_c8 (gfc_array_c8 *ret, const gfc_array_c8 *array, ptrdiff_t shift, roffset = sizeof (GFC_COMPLEX_8); soffset = sizeof (GFC_COMPLEX_8); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_COMPLEX_8); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_COMPLEX_8); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_c8 (gfc_array_c8 *ret, const gfc_array_c8 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_COMPLEX_8); size_t len2 = (len - shift) * sizeof (GFC_COMPLEX_8); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_i1.c b/libgfortran/generated/cshift0_i1.c index 120096bd6901..8b00cd1eb4a1 100644 --- a/libgfortran/generated/cshift0_i1.c +++ b/libgfortran/generated/cshift0_i1.c @@ -116,8 +116,9 @@ cshift0_i1 (gfc_array_i1 *ret, const gfc_array_i1 *array, ptrdiff_t shift, roffset = sizeof (GFC_INTEGER_1); soffset = sizeof (GFC_INTEGER_1); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_INTEGER_1); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_INTEGER_1); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_i1 (gfc_array_i1 *ret, const gfc_array_i1 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_INTEGER_1); size_t len2 = (len - shift) * sizeof (GFC_INTEGER_1); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_i16.c b/libgfortran/generated/cshift0_i16.c index 92ffea9e315d..f47aeefae997 100644 --- a/libgfortran/generated/cshift0_i16.c +++ b/libgfortran/generated/cshift0_i16.c @@ -116,8 +116,9 @@ cshift0_i16 (gfc_array_i16 *ret, const gfc_array_i16 *array, ptrdiff_t shift, roffset = sizeof (GFC_INTEGER_16); soffset = sizeof (GFC_INTEGER_16); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_INTEGER_16); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_INTEGER_16); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_i16 (gfc_array_i16 *ret, const gfc_array_i16 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_INTEGER_16); size_t len2 = (len - shift) * sizeof (GFC_INTEGER_16); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_i2.c b/libgfortran/generated/cshift0_i2.c index 44d4e54654c5..f5c8a8909383 100644 --- a/libgfortran/generated/cshift0_i2.c +++ b/libgfortran/generated/cshift0_i2.c @@ -116,8 +116,9 @@ cshift0_i2 (gfc_array_i2 *ret, const gfc_array_i2 *array, ptrdiff_t shift, roffset = sizeof (GFC_INTEGER_2); soffset = sizeof (GFC_INTEGER_2); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_INTEGER_2); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_INTEGER_2); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_i2 (gfc_array_i2 *ret, const gfc_array_i2 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_INTEGER_2); size_t len2 = (len - shift) * sizeof (GFC_INTEGER_2); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_i4.c b/libgfortran/generated/cshift0_i4.c index f63bba884d4e..eedfbfa6ce44 100644 --- a/libgfortran/generated/cshift0_i4.c +++ b/libgfortran/generated/cshift0_i4.c @@ -116,8 +116,9 @@ cshift0_i4 (gfc_array_i4 *ret, const gfc_array_i4 *array, ptrdiff_t shift, roffset = sizeof (GFC_INTEGER_4); soffset = sizeof (GFC_INTEGER_4); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_INTEGER_4); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_INTEGER_4); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_i4 (gfc_array_i4 *ret, const gfc_array_i4 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_INTEGER_4); size_t len2 = (len - shift) * sizeof (GFC_INTEGER_4); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_i8.c b/libgfortran/generated/cshift0_i8.c index 2083779755d7..5042cc54b847 100644 --- a/libgfortran/generated/cshift0_i8.c +++ b/libgfortran/generated/cshift0_i8.c @@ -116,8 +116,9 @@ cshift0_i8 (gfc_array_i8 *ret, const gfc_array_i8 *array, ptrdiff_t shift, roffset = sizeof (GFC_INTEGER_8); soffset = sizeof (GFC_INTEGER_8); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_INTEGER_8); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_INTEGER_8); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_i8 (gfc_array_i8 *ret, const gfc_array_i8 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_INTEGER_8); size_t len2 = (len - shift) * sizeof (GFC_INTEGER_8); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_r10.c b/libgfortran/generated/cshift0_r10.c index b3794fa78951..8fd8bd6ba33d 100644 --- a/libgfortran/generated/cshift0_r10.c +++ b/libgfortran/generated/cshift0_r10.c @@ -116,8 +116,9 @@ cshift0_r10 (gfc_array_r10 *ret, const gfc_array_r10 *array, ptrdiff_t shift, roffset = sizeof (GFC_REAL_10); soffset = sizeof (GFC_REAL_10); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_REAL_10); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_REAL_10); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_r10 (gfc_array_r10 *ret, const gfc_array_r10 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_REAL_10); size_t len2 = (len - shift) * sizeof (GFC_REAL_10); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_r16.c b/libgfortran/generated/cshift0_r16.c index 19d6699b0869..9793bf1d1020 100644 --- a/libgfortran/generated/cshift0_r16.c +++ b/libgfortran/generated/cshift0_r16.c @@ -116,8 +116,9 @@ cshift0_r16 (gfc_array_r16 *ret, const gfc_array_r16 *array, ptrdiff_t shift, roffset = sizeof (GFC_REAL_16); soffset = sizeof (GFC_REAL_16); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_REAL_16); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_REAL_16); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_r16 (gfc_array_r16 *ret, const gfc_array_r16 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_REAL_16); size_t len2 = (len - shift) * sizeof (GFC_REAL_16); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_r17.c b/libgfortran/generated/cshift0_r17.c index 20162fa609e5..cdbc455b795e 100644 --- a/libgfortran/generated/cshift0_r17.c +++ b/libgfortran/generated/cshift0_r17.c @@ -116,8 +116,9 @@ cshift0_r17 (gfc_array_r17 *ret, const gfc_array_r17 *array, ptrdiff_t shift, roffset = sizeof (GFC_REAL_17); soffset = sizeof (GFC_REAL_17); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_REAL_17); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_REAL_17); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_r17 (gfc_array_r17 *ret, const gfc_array_r17 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_REAL_17); size_t len2 = (len - shift) * sizeof (GFC_REAL_17); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_r4.c b/libgfortran/generated/cshift0_r4.c index 3619bb56887c..e78cc0b0679e 100644 --- a/libgfortran/generated/cshift0_r4.c +++ b/libgfortran/generated/cshift0_r4.c @@ -116,8 +116,9 @@ cshift0_r4 (gfc_array_r4 *ret, const gfc_array_r4 *array, ptrdiff_t shift, roffset = sizeof (GFC_REAL_4); soffset = sizeof (GFC_REAL_4); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_REAL_4); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_REAL_4); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_r4 (gfc_array_r4 *ret, const gfc_array_r4 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_REAL_4); size_t len2 = (len - shift) * sizeof (GFC_REAL_4); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/generated/cshift0_r8.c b/libgfortran/generated/cshift0_r8.c index b54ff8f35da8..fdde84f452e2 100644 --- a/libgfortran/generated/cshift0_r8.c +++ b/libgfortran/generated/cshift0_r8.c @@ -116,8 +116,9 @@ cshift0_r8 (gfc_array_r8 *ret, const gfc_array_r8 *array, ptrdiff_t shift, roffset = sizeof (GFC_REAL_8); soffset = sizeof (GFC_REAL_8); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof (GFC_REAL_8); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof (GFC_REAL_8); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -175,8 +176,8 @@ cshift0_r8 (gfc_array_r8 *ret, const gfc_array_r8 *array, ptrdiff_t shift, { size_t len1 = shift * sizeof (GFC_REAL_8); size_t len2 = (len - shift) * sizeof (GFC_REAL_8); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else { diff --git a/libgfortran/m4/cshift0.m4 b/libgfortran/m4/cshift0.m4 index 02c551c40cf9..9c43590f32ee 100644 --- a/libgfortran/m4/cshift0.m4 +++ b/libgfortran/m4/cshift0.m4 @@ -117,8 +117,9 @@ cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ptrdiff_t shift, roffset = sizeof ('rtype_name`); soffset = sizeof ('rtype_name`); len = GFC_DESCRIPTOR_SPACING(array, which) - * GFC_DESCRIPTOR_EXTENT(array, which); - shift *= GFC_DESCRIPTOR_SPACING(array, which); + * GFC_DESCRIPTOR_EXTENT(array, which) + / sizeof ('rtype_name`); + shift *= GFC_DESCRIPTOR_SPACING(array, which) / sizeof ('rtype_name`); for (dim = which + 1; dim < GFC_DESCRIPTOR_RANK (array); dim++) { count[n] = 0; @@ -176,8 +177,8 @@ cshift0_'rtype_code` ('rtype` *ret, const 'rtype` *array, ptrdiff_t shift, { size_t len1 = shift * sizeof ('rtype_name`); size_t len2 = (len - shift) * sizeof ('rtype_name`); - memcpy (rptr, sptr + shift, len2); - memcpy (rptr + (len - shift), sptr, len1); + memcpy (rptr, ((char*) sptr) + len1, len2); + memcpy (((char*) rptr) + len2, sptr, len1); } else {