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:48 +0000	[thread overview]
Message-ID: <bug-112371-4-KFW7T0IBNG@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 #6 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:62715bf891979cfb8c6684fdcd65b06a28bbbf5c

commit r14-5246-g62715bf891979cfb8c6684fdcd65b06a28bbbf5c
Author: Mikael Morin <mikael@gcc.gnu.org>
Date:   Tue Nov 7 11:24:04 2023 +0100

    libgfortran: Remove empty array descriptor first dimension overwrite
[PR112371]

    Remove the forced overwrite of the first dimension of the result array
    descriptor to set it to zero extent, in the function templates for
    transformational functions doing an array reduction along a dimension. 
This
    overwrite, which happened before early returning in case the result array
    was empty, was wrong because an array may have a non-zero extent in the
    first dimension and still be empty if it has a zero extent in a higher
    dimension.  Overwriting the dimension was resulting in wrong array result
    upper bound for the first dimension in that case.

    The offending piece of code was present in several places, and this removes
    them all.  More precisely, there is only one case to fix for logical
    reduction functions, and there are three cases for other reduction
    functions, corresponding to non-masked reduction, reduction with array
mask,
    and reduction with scalar mask.  The impacted m4 files are
    ifunction_logical.m4 for logical reduction functions, ifunction.m4 for
    regular functions and types, ifunction-s.m4 for character minloc and
maxloc,
    ifunction-s2.m4 for character minval and maxval, and ifindloc1.m4 for
    findloc.

            PR fortran/112371

    libgfortran/ChangeLog:

            * m4/ifunction.m4 (START_ARRAY_FUNCTION,
START_MASKED_ARRAY_FUNCTION,
            SCALAR_ARRAY_FUNCTION): Remove overwrite of the first dimension of
the
            array descriptor.
            * m4/ifunction-s.m4 (START_ARRAY_FUNCTION,
START_MASKED_ARRAY_FUNCTION,
            SCALAR_ARRAY_FUNCTION): Ditto.
            * m4/ifunction-s2.m4 (START_ARRAY_FUNCTION,
            START_MASKED_ARRAY_FUNCTION, SCALAR_ARRAY_FUNCTION): Ditto.
            * m4/ifunction_logical.m4 (START_ARRAY_FUNCTION): Ditto.
            * m4/ifindloc1.m4: Ditto.
            * generated/all_l1.c: Regenerate.
            * generated/all_l16.c: Regenerate.
            * generated/all_l2.c: Regenerate.
            * generated/all_l4.c: Regenerate.
            * generated/all_l8.c: Regenerate.
            * generated/any_l1.c: Regenerate.
            * generated/any_l16.c: Regenerate.
            * generated/any_l2.c: Regenerate.
            * generated/any_l4.c: Regenerate.
            * generated/any_l8.c: Regenerate.
            * generated/count_16_l.c: Regenerate.
            * generated/count_1_l.c: Regenerate.
            * generated/count_2_l.c: Regenerate.
            * generated/count_4_l.c: Regenerate.
            * generated/count_8_l.c: Regenerate.
            * generated/findloc1_c10.c: Regenerate.
            * generated/findloc1_c16.c: Regenerate.
            * generated/findloc1_c17.c: Regenerate.
            * generated/findloc1_c4.c: Regenerate.
            * generated/findloc1_c8.c: Regenerate.
            * generated/findloc1_i1.c: Regenerate.
            * generated/findloc1_i16.c: Regenerate.
            * generated/findloc1_i2.c: Regenerate.
            * generated/findloc1_i4.c: Regenerate.
            * generated/findloc1_i8.c: Regenerate.
            * generated/findloc1_r10.c: Regenerate.
            * generated/findloc1_r16.c: Regenerate.
            * generated/findloc1_r17.c: Regenerate.
            * generated/findloc1_r4.c: Regenerate.
            * generated/findloc1_r8.c: Regenerate.
            * generated/findloc1_s1.c: Regenerate.
            * generated/findloc1_s4.c: Regenerate.
            * 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/norm2_r10.c: Regenerate.
            * generated/norm2_r16.c: Regenerate.
            * generated/norm2_r17.c: Regenerate.
            * generated/norm2_r4.c: Regenerate.
            * generated/norm2_r8.c: Regenerate.
            * generated/parity_l1.c: Regenerate.
            * generated/parity_l16.c: Regenerate.
            * generated/parity_l2.c: Regenerate.
            * generated/parity_l4.c: Regenerate.
            * generated/parity_l8.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_11.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
2023-11-08 11:32 ` cvs-commit at gcc dot gnu.org [this message]
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-KFW7T0IBNG@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).