https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112371

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Mikael Morin <mik...@gcc.gnu.org>:

https://gcc.gnu.org/g:85a9688180a5523ae1704119978f3d634493300f

commit r14-5245-g85a9688180a5523ae1704119978f3d634493300f
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Tue Nov 7 11:24:03 2023 +0100

    libgfortran: Remove early return if extent is zero [PR112371]

    Remove the early return present in function templates for transformational
    functions doing a (masked) reduction of an array along a dimension.
    This early return, which triggered if the extent in the reduction dimension
    was zero, was wrong because even if the reduction operation degenerates to
    a constant value in that case, one has to loop anyway along the other
    dimensions to initialize every element of the resulting array with that
    constant value.  The case of negative extent (not sure whether it may
happen
    in practice) which was also early returning, is handled by clamping to
zero.

    The offending piece of code was present in several places, and this removes
    them all.  Namely, the impacted m4 files are ifunction.m4 for regular
    functions and types, ifunction-s.m4 for character minloc and maxloc, and
    ifunction-s2.m4 for character minval and maxval.

            PR fortran/112371

    libgfortran/ChangeLog:

            * m4/ifunction.m4 (START_MASKED_ARRAY_FUNCTION): Remove early
return if
            extent is zero or less, and clamp negative value to zero.
            * m4/ifunction-s.m4 (START_MASKED_ARRAY_FUNCTION): Ditto.
            * m4/ifunction-s2.m4 (START_MASKED_ARRAY_FUNCTION): Ditto.
            * generated/iall_i1.c: Regenerate.
            * generated/iall_i16.c: Regenerate.
            * generated/iall_i2.c: Regenerate.
            * generated/iall_i4.c: Regenerate.
            * generated/iall_i8.c: Regenerate.
            * generated/iany_i1.c: Regenerate.
            * generated/iany_i16.c: Regenerate.
            * generated/iany_i2.c: Regenerate.
            * generated/iany_i4.c: Regenerate.
            * generated/iany_i8.c: Regenerate.
            * generated/iparity_i1.c: Regenerate.
            * generated/iparity_i16.c: Regenerate.
            * generated/iparity_i2.c: Regenerate.
            * generated/iparity_i4.c: Regenerate.
            * generated/iparity_i8.c: Regenerate.
            * generated/maxloc1_16_i1.c: Regenerate.
            * generated/maxloc1_16_i16.c: Regenerate.
            * generated/maxloc1_16_i2.c: Regenerate.
            * generated/maxloc1_16_i4.c: Regenerate.
            * generated/maxloc1_16_i8.c: Regenerate.
            * generated/maxloc1_16_r10.c: Regenerate.
            * generated/maxloc1_16_r16.c: Regenerate.
            * generated/maxloc1_16_r17.c: Regenerate.
            * generated/maxloc1_16_r4.c: Regenerate.
            * generated/maxloc1_16_r8.c: Regenerate.
            * generated/maxloc1_16_s1.c: Regenerate.
            * generated/maxloc1_16_s4.c: Regenerate.
            * generated/maxloc1_4_i1.c: Regenerate.
            * generated/maxloc1_4_i16.c: Regenerate.
            * generated/maxloc1_4_i2.c: Regenerate.
            * generated/maxloc1_4_i4.c: Regenerate.
            * generated/maxloc1_4_i8.c: Regenerate.
            * generated/maxloc1_4_r10.c: Regenerate.
            * generated/maxloc1_4_r16.c: Regenerate.
            * generated/maxloc1_4_r17.c: Regenerate.
            * generated/maxloc1_4_r4.c: Regenerate.
            * generated/maxloc1_4_r8.c: Regenerate.
            * generated/maxloc1_4_s1.c: Regenerate.
            * generated/maxloc1_4_s4.c: Regenerate.
            * generated/maxloc1_8_i1.c: Regenerate.
            * generated/maxloc1_8_i16.c: Regenerate.
            * generated/maxloc1_8_i2.c: Regenerate.
            * generated/maxloc1_8_i4.c: Regenerate.
            * generated/maxloc1_8_i8.c: Regenerate.
            * generated/maxloc1_8_r10.c: Regenerate.
            * generated/maxloc1_8_r16.c: Regenerate.
            * generated/maxloc1_8_r17.c: Regenerate.
            * generated/maxloc1_8_r4.c: Regenerate.
            * generated/maxloc1_8_r8.c: Regenerate.
            * generated/maxloc1_8_s1.c: Regenerate.
            * generated/maxloc1_8_s4.c: Regenerate.
            * generated/maxval1_s1.c: Regenerate.
            * generated/maxval1_s4.c: Regenerate.
            * generated/maxval_i1.c: Regenerate.
            * generated/maxval_i16.c: Regenerate.
            * generated/maxval_i2.c: Regenerate.
            * generated/maxval_i4.c: Regenerate.
            * generated/maxval_i8.c: Regenerate.
            * generated/maxval_r10.c: Regenerate.
            * generated/maxval_r16.c: Regenerate.
            * generated/maxval_r17.c: Regenerate.
            * generated/maxval_r4.c: Regenerate.
            * generated/maxval_r8.c: Regenerate.
            * generated/minloc1_16_i1.c: Regenerate.
            * generated/minloc1_16_i16.c: Regenerate.
            * generated/minloc1_16_i2.c: Regenerate.
            * generated/minloc1_16_i4.c: Regenerate.
            * generated/minloc1_16_i8.c: Regenerate.
            * generated/minloc1_16_r10.c: Regenerate.
            * generated/minloc1_16_r16.c: Regenerate.
            * generated/minloc1_16_r17.c: Regenerate.
            * generated/minloc1_16_r4.c: Regenerate.
            * generated/minloc1_16_r8.c: Regenerate.
            * generated/minloc1_16_s1.c: Regenerate.
            * generated/minloc1_16_s4.c: Regenerate.
            * generated/minloc1_4_i1.c: Regenerate.
            * generated/minloc1_4_i16.c: Regenerate.
            * generated/minloc1_4_i2.c: Regenerate.
            * generated/minloc1_4_i4.c: Regenerate.
            * generated/minloc1_4_i8.c: Regenerate.
            * generated/minloc1_4_r10.c: Regenerate.
            * generated/minloc1_4_r16.c: Regenerate.
            * generated/minloc1_4_r17.c: Regenerate.
            * generated/minloc1_4_r4.c: Regenerate.
            * generated/minloc1_4_r8.c: Regenerate.
            * generated/minloc1_4_s1.c: Regenerate.
            * generated/minloc1_4_s4.c: Regenerate.
            * generated/minloc1_8_i1.c: Regenerate.
            * generated/minloc1_8_i16.c: Regenerate.
            * generated/minloc1_8_i2.c: Regenerate.
            * generated/minloc1_8_i4.c: Regenerate.
            * generated/minloc1_8_i8.c: Regenerate.
            * generated/minloc1_8_r10.c: Regenerate.
            * generated/minloc1_8_r16.c: Regenerate.
            * generated/minloc1_8_r17.c: Regenerate.
            * generated/minloc1_8_r4.c: Regenerate.
            * generated/minloc1_8_r8.c: Regenerate.
            * generated/minloc1_8_s1.c: Regenerate.
            * generated/minloc1_8_s4.c: Regenerate.
            * generated/minval1_s1.c: Regenerate.
            * generated/minval1_s4.c: Regenerate.
            * generated/minval_i1.c: Regenerate.
            * generated/minval_i16.c: Regenerate.
            * generated/minval_i2.c: Regenerate.
            * generated/minval_i4.c: Regenerate.
            * generated/minval_i8.c: Regenerate.
            * generated/minval_r10.c: Regenerate.
            * generated/minval_r16.c: Regenerate.
            * generated/minval_r17.c: Regenerate.
            * generated/minval_r4.c: Regenerate.
            * generated/minval_r8.c: Regenerate.
            * generated/product_c10.c: Regenerate.
            * generated/product_c16.c: Regenerate.
            * generated/product_c17.c: Regenerate.
            * generated/product_c4.c: Regenerate.
            * generated/product_c8.c: Regenerate.
            * generated/product_i1.c: Regenerate.
            * generated/product_i16.c: Regenerate.
            * generated/product_i2.c: Regenerate.
            * generated/product_i4.c: Regenerate.
            * generated/product_i8.c: Regenerate.
            * generated/product_r10.c: Regenerate.
            * generated/product_r16.c: Regenerate.
            * generated/product_r17.c: Regenerate.
            * generated/product_r4.c: Regenerate.
            * generated/product_r8.c: Regenerate.
            * generated/sum_c10.c: Regenerate.
            * generated/sum_c16.c: Regenerate.
            * generated/sum_c17.c: Regenerate.
            * generated/sum_c4.c: Regenerate.
            * generated/sum_c8.c: Regenerate.
            * generated/sum_i1.c: Regenerate.
            * generated/sum_i16.c: Regenerate.
            * generated/sum_i2.c: Regenerate.
            * generated/sum_i4.c: Regenerate.
            * generated/sum_i8.c: Regenerate.
            * generated/sum_r10.c: Regenerate.
            * generated/sum_r16.c: Regenerate.
            * generated/sum_r17.c: Regenerate.
            * generated/sum_r4.c: Regenerate.
            * generated/sum_r8.c: Regenerate.

    gcc/testsuite/ChangeLog:

            * gfortran.dg/bound_10.f90: New test.

Reply via email to