https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120191
Bug ID: 120191 Summary: Functions minloc() and maxloc() ignore the "back" parameter when "kind" is present. Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: daniil2472s at gmail dot com Target Milestone: --- Created attachment 61378 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61378&action=edit Patch to remove "kind" parameter. Greetings! In the minloc() and maxloc() functions, when the "kind" parameter is present, the "back" parameter is not working. $ gfortran -v Using built-in specs. COLLECT_GCC=gfortran COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 13.3.0-6ubuntu2~24.04' --with-bugurl=file:///usr/share/doc/gcc-13/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-13 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/libexec --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-libstdcxx-backtrace --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-13-fG75Ri/gcc-13-13.3.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2 Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) Simple test. $ cat test_minmaxloc.f90 program main implicit none real, dimension(4) :: a a = [ 3.0, 1.0, 3.0, 1.0] print *, "+++ kind=default +++" print *, "back=default:", maxloc(a) print *, "back=.true. :", maxloc(a, back=.true.) print *, "back=.false.:", maxloc(a, back=.false.) print *, "+++ kind=1 +++" print *, "back=default:", maxloc(a, kind=1) print *, "back=.true. :", maxloc(a, kind=1, back=.true.) print *, "back=.false.:", maxloc(a, kind=1, back=.false.) end program $ gfortran -Wall -Wextra -fdump-tree-original test_minmaxloc.f90 +++ kind=default +++ back=default: 1 back=.true. : 3 back=.false.: 1 +++ kind=1 +++ back=default: 3 back=.true. : 3 back=.false.: 3 If we look at a C-like dump file, we will see a function call with four parameters: _gfortran_maxloc0_4_r4 (&atmp.30, D.4403, D.4407, 1); but the corresponding libgfortran function receives only three parameters: extern void maxloc0_4_r4 (gfc_array_i4 * const restrict retarray, gfc_array_r4 * const restrict array, GFC_LOGICAL_4); The third parameter in the function call is "kind." Since the "kind" parameter converts to an intrinsic name for minloc and maxloc functions, it's redundant in the function call. As far as I figured it out, the problem is in the following file gcc/fortran/trans-intrinsic.cc in function gfc_conv_intrinsic_minmaxloc() The strip_kind_from_actual() function must be called in any case to remove the "kind" argument. For now it's called only with the condition "if (arrayexpr->ts.type == BT_CHARACTER)". Attaching the proposed patch.