public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libfortran/112371] Wrong upper bound for the result of reduction intrinsics if the array is empty
Date: Wed, 08 Nov 2023 11:32:43 +0000	[thread overview]
Message-ID: <bug-112371-4-GujJMR6VNk@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-112371-4@http.gcc.gnu.org/bugzilla/>

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 <mikael@gcc.gnu.org>:

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

commit r14-5245-g85a9688180a5523ae1704119978f3d634493300f
Author: Mikael Morin <mikael@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.

  parent reply	other threads:[~2023-11-08 11:32 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-03 15:23 [Bug fortran/112371] New: " mikael at gcc dot gnu.org
2023-11-03 15:28 ` [Bug fortran/112371] " mikael at gcc dot gnu.org
2023-11-03 15:31 ` mikael at gcc dot gnu.org
2023-11-03 15:56 ` mikael at gcc dot gnu.org
2023-11-08 11:04 ` [Bug libfortran/112371] " mikael at gcc dot gnu.org
2023-11-08 11:32 ` cvs-commit at gcc dot gnu.org [this message]
2023-11-08 11:32 ` cvs-commit at gcc dot gnu.org
2023-11-08 11:36 ` mikael at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-112371-4-GujJMR6VNk@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).