]> git.ipfire.org Git - thirdparty/gcc.git/commit
Fortran: Fix some problems with the reduce intrinsic [PR119460]
authorPaul Thomas <pault@gcc.gnu.org>
Wed, 9 Apr 2025 08:50:04 +0000 (09:50 +0100)
committerPaul Thomas <pault@gcc.gnu.org>
Wed, 9 Apr 2025 08:50:04 +0000 (09:50 +0100)
commitee65440cbd8042a5e5885e18bde70f8d530e4404
tree0e4930420bf8f02289d886b643c1f2ab0cbadf82
parentfaff25435b0d23b2ac4deef5a9434c8cd098c0d2
Fortran:  Fix some problems with the reduce intrinsic [PR119460]

2025-04-09  Paul Thomas  <pault@gcc.gnu.org>
    and Harald Anlauf  <anlauf@gcc.gnu.org>

gcc/fortran
PR fortran/119460
* iresolve.cc (generate_reduce_op_wrapper): Increase the size
of 'tname'. Change intent of 'a' and 'b' to intent_in.
* trans-decl.cc (add_argument_checking): Do not test artificial
formal symbols.
* trans-expr.cc (gfc_conv_procedure_call): Remove reduce_scalar
and the blocks triggered by it.
* trans-intrinsic.cc (gfc_conv_intrinsic_function): Set the
result of non-character, scalar reduce to be allocatable.

gcc/testsuite/
PR fortran/119460
* gfortran.dg/reduce_2.f90: Add test to check that deferred len
characters cannot slip through.
* gfortran.dg/reduce_3.f90: New test
* gfortran.dg/reduce_4.f90: New test

libgfortran/
PR libfortran/119460
* intrinsics/reduce.c (reduce): Correct error message about
mismatch between dim and the rank of array. Output the values
of both. Correct the evaluation of the result stride and
extent.
(reduce_scalar): The front end treats the result as an
allocatable so eliminate memcpy and free. Return the base-addr
of the local descriptor.
(reduce_c): Correct the type of the string lengths.
(reduce_scalar_c): Correct the type of the string lengths.Test
to see if 'res' is allocated. If not then return the base_addr
of the local descriptor.
gcc/fortran/iresolve.cc
gcc/fortran/trans-decl.cc
gcc/fortran/trans-expr.cc
gcc/fortran/trans-intrinsic.cc
gcc/testsuite/gfortran.dg/reduce_2.f90
gcc/testsuite/gfortran.dg/reduce_3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/reduce_4.f90 [new file with mode: 0644]
libgfortran/intrinsics/reduce.c