X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=libgfortran%2Fgenerated%2Fsum_i16.c;h=807f2300eab55fb9005e873e311fa177497471c3;hb=7adcbafe45f8001b698967defe682687b52c0007;hp=d02a1714695c8734fa434abd643f3adf9dd02e83;hpb=0cd0559e8ceb1764a41c8964f30a7de025956e8a;p=thirdparty%2Fgcc.git diff --git a/libgfortran/generated/sum_i16.c b/libgfortran/generated/sum_i16.c index d02a1714695c..807f2300eab5 100644 --- a/libgfortran/generated/sum_i16.c +++ b/libgfortran/generated/sum_i16.c @@ -1,5 +1,5 @@ /* Implementation of the SUM intrinsic - Copyright 2002, 2007, 2009 Free Software Foundation, Inc. + Copyright (C) 2002-2022 Free Software Foundation, Inc. Contributed by Paul Brook This file is part of the GNU Fortran 95 runtime library (libgfortran). @@ -24,8 +24,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see . */ #include "libgfortran.h" -#include -#include #if defined (HAVE_GFC_INTEGER_16) && defined (HAVE_GFC_INTEGER_16) @@ -54,8 +52,15 @@ sum_i16 (gfc_array_i16 * const restrict retarray, int continue_loop; /* Make dim zero based to avoid confusion. */ - dim = (*pdim) - 1; rank = GFC_DESCRIPTOR_RANK (array) - 1; + dim = (*pdim) - 1; + + if (unlikely (dim < 0 || dim > rank)) + { + runtime_error ("Dim argument incorrect in SUM intrinsic: " + "is %ld, should be between 1 and %ld", + (long int) dim + 1, (long int) rank + 1); + } len = GFC_DESCRIPTOR_EXTENT(array,dim); if (len < 0) @@ -79,7 +84,7 @@ sum_i16 (gfc_array_i16 * const restrict retarray, extent[n] = 0; } - if (retarray->data == NULL) + if (retarray->base_addr == NULL) { size_t alloc_size, str; @@ -95,11 +100,11 @@ sum_i16 (gfc_array_i16 * const restrict retarray, } retarray->offset = 0; - retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + retarray->dtype.rank = rank; - alloc_size = sizeof (GFC_INTEGER_16) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) - * extent[rank-1]; + alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]; + retarray->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_16)); if (alloc_size == 0) { /* Make sure we have a zero-sized array. */ @@ -107,8 +112,6 @@ sum_i16 (gfc_array_i16 * const restrict retarray, return; } - else - retarray->data = internal_malloc_size (alloc_size); } else { @@ -128,11 +131,11 @@ sum_i16 (gfc_array_i16 * const restrict retarray, count[n] = 0; dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); if (extent[n] <= 0) - len = 0; + return; } - base = array->data; - dest = retarray->data; + base = array->base_addr; + dest = retarray->base_addr; continue_loop = 1; while (continue_loop) @@ -147,8 +150,10 @@ sum_i16 (gfc_array_i16 * const restrict retarray, *dest = 0; else { +#if ! defined HAVE_BACK_ARG for (n = 0; n < len; n++, src += delta) { +#endif result += *src; } @@ -171,9 +176,9 @@ sum_i16 (gfc_array_i16 * const restrict retarray, base -= sstride[n] * extent[n]; dest -= dstride[n] * extent[n]; n++; - if (n == rank) + if (n >= rank) { - /* Break out of the look. */ + /* Break out of the loop. */ continue_loop = 0; break; } @@ -207,22 +212,40 @@ msum_i16 (gfc_array_i16 * const restrict retarray, GFC_INTEGER_16 * restrict dest; const GFC_INTEGER_16 * restrict base; const GFC_LOGICAL_1 * restrict mbase; - int rank; - int dim; + index_type rank; + index_type dim; index_type n; index_type len; index_type delta; index_type mdelta; int mask_kind; + if (mask == NULL) + { +#ifdef HAVE_BACK_ARG + sum_i16 (retarray, array, pdim, back); +#else + sum_i16 (retarray, array, pdim); +#endif + return; + } + dim = (*pdim) - 1; rank = GFC_DESCRIPTOR_RANK (array) - 1; + + if (unlikely (dim < 0 || dim > rank)) + { + runtime_error ("Dim argument incorrect in SUM intrinsic: " + "is %ld, should be between 1 and %ld", + (long int) dim + 1, (long int) rank + 1); + } + len = GFC_DESCRIPTOR_EXTENT(array,dim); if (len <= 0) return; - mbase = mask->data; + mbase = mask->base_addr; mask_kind = GFC_DESCRIPTOR_SIZE (mask); @@ -258,7 +281,7 @@ msum_i16 (gfc_array_i16 * const restrict retarray, extent[n] = 0; } - if (retarray->data == NULL) + if (retarray->base_addr == NULL) { size_t alloc_size, str; @@ -273,11 +296,10 @@ msum_i16 (gfc_array_i16 * const restrict retarray, } - alloc_size = sizeof (GFC_INTEGER_16) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) - * extent[rank-1]; + alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]; retarray->offset = 0; - retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + retarray->dtype.rank = rank; if (alloc_size == 0) { @@ -286,7 +308,7 @@ msum_i16 (gfc_array_i16 * const restrict retarray, return; } else - retarray->data = internal_malloc_size (alloc_size); + retarray->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_16)); } else @@ -311,8 +333,8 @@ msum_i16 (gfc_array_i16 * const restrict retarray, return; } - dest = retarray->data; - base = array->data; + dest = retarray->base_addr; + base = array->base_addr; while (base) { @@ -324,18 +346,13 @@ msum_i16 (gfc_array_i16 * const restrict retarray, { result = 0; - if (len <= 0) - *dest = 0; - else + for (n = 0; n < len; n++, src += delta, msrc += mdelta) { - for (n = 0; n < len; n++, src += delta, msrc += mdelta) - { if (*msrc) result += *src; - } - *dest = result; } + *dest = result; } /* Advance to the next element. */ count[0]++; @@ -354,9 +371,9 @@ msum_i16 (gfc_array_i16 * const restrict retarray, mbase -= mstride[n] * extent[n]; dest -= dstride[n] * extent[n]; n++; - if (n == rank) + if (n >= rank) { - /* Break out of the look. */ + /* Break out of the loop. */ base = NULL; break; } @@ -392,15 +409,26 @@ ssum_i16 (gfc_array_i16 * const restrict retarray, index_type dim; - if (*mask) + if (mask == NULL || *mask) { +#ifdef HAVE_BACK_ARG + sum_i16 (retarray, array, pdim, back); +#else sum_i16 (retarray, array, pdim); +#endif return; } /* Make dim zero based to avoid confusion. */ dim = (*pdim) - 1; rank = GFC_DESCRIPTOR_RANK (array) - 1; + if (unlikely (dim < 0 || dim > rank)) + { + runtime_error ("Dim argument incorrect in SUM intrinsic: " + "is %ld, should be between 1 and %ld", + (long int) dim + 1, (long int) rank + 1); + } + for (n = 0; n < dim; n++) { extent[n] = GFC_DESCRIPTOR_EXTENT(array,n); @@ -418,7 +446,7 @@ ssum_i16 (gfc_array_i16 * const restrict retarray, extent[n] = 0; } - if (retarray->data == NULL) + if (retarray->base_addr == NULL) { size_t alloc_size, str; @@ -434,10 +462,9 @@ ssum_i16 (gfc_array_i16 * const restrict retarray, } retarray->offset = 0; - retarray->dtype = (array->dtype & ~GFC_DTYPE_RANK_MASK) | rank; + retarray->dtype.rank = rank; - alloc_size = sizeof (GFC_INTEGER_16) * GFC_DESCRIPTOR_STRIDE(retarray,rank-1) - * extent[rank-1]; + alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]; if (alloc_size == 0) { @@ -446,7 +473,7 @@ ssum_i16 (gfc_array_i16 * const restrict retarray, return; } else - retarray->data = internal_malloc_size (alloc_size); + retarray->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_16)); } else { @@ -478,7 +505,7 @@ ssum_i16 (gfc_array_i16 * const restrict retarray, dstride[n] = GFC_DESCRIPTOR_STRIDE(retarray,n); } - dest = retarray->data; + dest = retarray->base_addr; while(1) { @@ -495,7 +522,7 @@ ssum_i16 (gfc_array_i16 * const restrict retarray, frequently used path so probably not worth it. */ dest -= dstride[n] * extent[n]; n++; - if (n == rank) + if (n >= rank) return; else {