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

--- Comment #3 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:748a7bc4624e7b000f6fdb93a8cf7da73ff193bb

commit r16-594-g748a7bc4624e7b000f6fdb93a8cf7da73ff193bb
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Tue May 13 14:20:22 2025 +0200

    libfortran: Fix up _gfortran_{,m,s}findloc2_s{1,4} [PR120196]

    As mentioned in the PR, _gfortran_{,m,s}findloc2_s{1,4} iterate too many
    times in the back case if nothing is found.
    For !back, the loops are for (i = 1; i <= extent; i++) so i is in the
    body [1, extent] if nothing is found, but for back it is
    for (i = extent; i >= 0; i--) so i is in the body [0, extent] and compares
    one element before the start of the array.
    Note, findloc1_s{1,4} uses
              for (n = len; n > 0; n--, src -= delta * len_array)
    for the back loop and
              for (n = 1; n <= len; n++, src += delta * len_array)
    for !back.  This patch fixes that.
    The testcase fails under valgrind without the libgfortran changes and
    succeeds with those.

    2025-05-13  Jakub Jelinek  <ja...@redhat.com>

            PR libfortran/120196
            * m4/ifindloc2.m4 (header1, header2): For back use i > 0 rather
than
            i >= 0 as for condition.
            * generated/findloc2_s1.c: Regenerate.
            * generated/findloc2_s4.c: Regenerate.

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

Reply via email to