public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/112371] New: Wrong upper bound for the result of reduction intrinsics if the array is empty
@ 2023-11-03 15:23 mikael at gcc dot gnu.org
  2023-11-03 15:28 ` [Bug fortran/112371] " mikael at gcc dot gnu.org
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: mikael at gcc dot gnu.org @ 2023-11-03 15:23 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 112371
           Summary: Wrong upper bound for the result of reduction
                    intrinsics if the array is empty
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mikael at gcc dot gnu.org
  Target Milestone: ---

In the following example, I expect the ubound to be (/ 3, 0, 7 /), but the
printed values are (/ 0, 0, 7 /).


program p
  implicit none
  call check_iparity
  call check_sum
  call check_minloc
contains
  subroutine check_iparity
    integer :: a(9,3,0,7)
    integer :: i
    integer, allocatable :: r(:,:,:)
    i = 1
    a = reshape((/ integer:: /), shape(a))
    r = iparity(a, dim=i)
    print *, shape(r)
    print *, ubound(r)
!    if (any(shape(r) /= (/ 3, 0, 7 /))) stop 11
!    if (any(ubound(r) /= (/ 3, 0, 7 /))) stop 13
  end subroutine
  subroutine check_sum
    integer :: a(9,3,0,7)
    integer :: i
    integer, allocatable :: r(:,:,:)
    i = 1
    a = reshape((/ integer:: /), shape(a))
    r = sum(a, dim=i)
    print *, shape(r)
    print *, ubound(r)
!    if (any(shape(r) /= (/ 3, 0, 7 /))) stop 21
!    if (any(ubound(r) /= (/ 3, 0, 7 /))) stop 23
  end subroutine
  subroutine check_minloc
    integer :: a(9,3,0,7)
    integer :: i
    integer, allocatable :: r(:,:,:)
    i = 1
    a = reshape((/ integer:: /), shape(a))
    r = minloc(a, dim=i)
    print *, shape(r)
    print *, ubound(r)
!    if (any(shape(r) /= (/ 3, 0, 7 /))) stop 31
!    if (any(ubound(r) /= (/ 3, 0, 7 /))) stop 33
  end subroutine
end program

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/112371] Wrong upper bound for the result of reduction intrinsics if the array is empty
  2023-11-03 15:23 [Bug fortran/112371] New: Wrong upper bound for the result of reduction intrinsics if the array is empty mikael at gcc dot gnu.org
@ 2023-11-03 15:28 ` mikael at gcc dot gnu.org
  2023-11-03 15:31 ` mikael at gcc dot gnu.org
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: mikael at gcc dot gnu.org @ 2023-11-03 15:28 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Mikael Morin <mikael at gcc dot gnu.org> ---
(In reply to Mikael Morin from comment #0)
>     i = 1
>     (...)
>     r = sum(a, dim=i)

If i is inlined, that is
  r = sum(a, dim=1)
the shape and ubound are (/ 3, 0, 7 /) as expected.
The difference is probably caused by inline vs library implementation.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/112371] Wrong upper bound for the result of reduction intrinsics if the array is empty
  2023-11-03 15:23 [Bug fortran/112371] New: Wrong upper bound for the result of reduction intrinsics if the array is empty 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
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: mikael at gcc dot gnu.org @ 2023-11-03 15:31 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Mikael Morin <mikael at gcc dot gnu.org> ---
If dim == 3, the ubound and shape are (/ 9, 3, 7 /) as expected.
That is, the problem only arises if the resulting array is empty.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/112371] Wrong upper bound for the result of reduction intrinsics if the array is empty
  2023-11-03 15:23 [Bug fortran/112371] New: Wrong upper bound for the result of reduction intrinsics if the array is empty 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
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: mikael at gcc dot gnu.org @ 2023-11-03 15:56 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Mikael Morin <mikael at gcc dot gnu.org> ---
Possible culprit:
ifunction.m4 has this code:

      retarray->base_addr = xmallocarray (alloc_size, sizeof (rtype_name));
      if (alloc_size == 0)
        {
          /* Make sure we have a zero-sized array.  */
          GFC_DIMENSION_SET(retarray->dim[0], 0, -1, 1);
          return;

        }

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libfortran/112371] Wrong upper bound for the result of reduction intrinsics if the array is empty
  2023-11-03 15:23 [Bug fortran/112371] New: Wrong upper bound for the result of reduction intrinsics if the array is empty mikael at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2023-11-03 15:56 ` mikael at gcc dot gnu.org
@ 2023-11-08 11:04 ` mikael at gcc dot gnu.org
  2023-11-08 11:32 ` cvs-commit at gcc dot gnu.org
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: mikael at gcc dot gnu.org @ 2023-11-08 11:04 UTC (permalink / raw)
  To: gcc-bugs

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

Mikael Morin <mikael at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
     Ever confirmed|0                           |1
   Last reconfirmed|                            |2023-11-08
           Assignee|unassigned at gcc dot gnu.org      |mikael at gcc dot gnu.org
          Component|fortran                     |libfortran

--- Comment #4 from Mikael Morin <mikael at gcc dot gnu.org> ---
Patches submitted (and accepted):
https://gcc.gnu.org/pipermail/fortran/2023-November/059904.html
https://gcc.gnu.org/pipermail/gcc-patches/2023-November/635518.html

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libfortran/112371] Wrong upper bound for the result of reduction intrinsics if the array is empty
  2023-11-03 15:23 [Bug fortran/112371] New: Wrong upper bound for the result of reduction intrinsics if the array is empty mikael at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  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
  2023-11-08 11:36 ` mikael at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-11-08 11:32 UTC (permalink / raw)
  To: gcc-bugs

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.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libfortran/112371] Wrong upper bound for the result of reduction intrinsics if the array is empty
  2023-11-03 15:23 [Bug fortran/112371] New: Wrong upper bound for the result of reduction intrinsics if the array is empty mikael at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2023-11-08 11:32 ` cvs-commit at gcc dot gnu.org
@ 2023-11-08 11:32 ` cvs-commit at gcc dot gnu.org
  2023-11-08 11:36 ` mikael at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-11-08 11:32 UTC (permalink / raw)
  To: gcc-bugs

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.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libfortran/112371] Wrong upper bound for the result of reduction intrinsics if the array is empty
  2023-11-03 15:23 [Bug fortran/112371] New: Wrong upper bound for the result of reduction intrinsics if the array is empty mikael at gcc dot gnu.org
                   ` (5 preceding siblings ...)
  2023-11-08 11:32 ` cvs-commit at gcc dot gnu.org
@ 2023-11-08 11:36 ` mikael at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: mikael at gcc dot gnu.org @ 2023-11-08 11:36 UTC (permalink / raw)
  To: gcc-bugs

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

Mikael Morin <mikael at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|ASSIGNED                    |RESOLVED

--- Comment #7 from Mikael Morin <mikael at gcc dot gnu.org> ---
Fixed for gfortran 14.1, closing.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-11-08 11:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-03 15:23 [Bug fortran/112371] New: Wrong upper bound for the result of reduction intrinsics if the array is empty 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
2023-11-08 11:36 ` mikael at gcc dot gnu.org

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).