From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2071) id BF73A3857C71; Wed, 24 Nov 2021 19:51:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BF73A3857C71 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Harald Anlauf To: gcc-cvs@gcc.gnu.org Subject: [gcc r11-9307] Fortran: fix scalarization for intrinsic LEN_TRIM with present KIND argument X-Act-Checkin: gcc X-Git-Author: Harald Anlauf X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 78421afafde5156d6d4c6c7073653e4b92f88e3d X-Git-Newrev: 3e6b9910e8e23d690fa1026b2879d37745ddd740 Message-Id: <20211124195116.BF73A3857C71@sourceware.org> Date: Wed, 24 Nov 2021 19:51:16 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Nov 2021 19:51:16 -0000 https://gcc.gnu.org/g:3e6b9910e8e23d690fa1026b2879d37745ddd740 commit r11-9307-g3e6b9910e8e23d690fa1026b2879d37745ddd740 Author: Harald Anlauf Date: Tue Nov 23 17:51:38 2021 +0100 Fortran: fix scalarization for intrinsic LEN_TRIM with present KIND argument gcc/fortran/ChangeLog: PR fortran/87711 PR fortran/87851 * trans-array.c (arg_evaluated_for_scalarization): Add LEN_TRIM to list of intrinsics for which an optional KIND argument needs to be removed before scalarization. gcc/testsuite/ChangeLog: PR fortran/87711 PR fortran/87851 * gfortran.dg/len_trim.f90: New test. (cherry picked from commit 721d8b9e26bf8205c1f2125c2626919a408cdbe4) Diff: --- gcc/fortran/trans-array.c | 1 + gcc/testsuite/gfortran.dg/len_trim.f90 | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index ea413d80ef1..db14daca459 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -11223,6 +11223,7 @@ arg_evaluated_for_scalarization (gfc_intrinsic_sym *function, switch (function->id) { case GFC_ISYM_INDEX: + case GFC_ISYM_LEN_TRIM: if ((actual_arg.name == NULL && arg_num == 3) || (actual_arg.name != NULL && strcmp ("kind", actual_arg.name) == 0)) diff --git a/gcc/testsuite/gfortran.dg/len_trim.f90 b/gcc/testsuite/gfortran.dg/len_trim.f90 new file mode 100644 index 00000000000..2252b81f084 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/len_trim.f90 @@ -0,0 +1,27 @@ +! { dg-do compile } +! { dg-options "-O -Wall -Wconversion-extra -fdump-tree-original" } +! { dg-final { scan-tree-dump-not "_gfortran_stop_numeric" "original" } } +! PR fortran/87711 - ICE in gfc_trans_transfer +! PR fortran/87851 - return type for len_trim + +program main + implicit none + character(3), parameter :: a(1) = 'aa' + character(3) :: b = "bb" + character(3) :: c(1) = 'cc' + integer(4), parameter :: l4(1) = len_trim (a, kind=4) + integer(8), parameter :: l8(1) = len_trim (a, kind=8) + integer :: kk(1) = len_trim (a) + integer(4) :: mm(1) = len_trim (a, kind=4) + integer(8) :: nn(1) = len_trim (a, kind=8) + kk = len_trim (a) + mm = len_trim (a, kind=4) + nn = len_trim (a, kind=8) + kk = len_trim ([b]) + mm = len_trim ([b],kind=4) + nn = len_trim ([b],kind=8) + kk = len_trim (c) + mm = len_trim (c, kind=4) + nn = len_trim (c, kind=8) + if (any (l4 /= 2_4) .or. any (l8 /= 2_8)) stop 1 +end program main