From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2071) id C66E03858C27; Sun, 13 Mar 2022 20:44:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C66E03858C27 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-9652] Fortran: do not frontend-optimize MINLOC/MAXLOC for character arrays X-Act-Checkin: gcc X-Git-Author: Harald Anlauf X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: d84c583a91e06a37ff722abca5a9e2abc95fc409 X-Git-Newrev: 47f89da89eb0ddc9ed87192886ff633a790fe08c Message-Id: <20220313204431.C66E03858C27@sourceware.org> Date: Sun, 13 Mar 2022 20:44:31 +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: Sun, 13 Mar 2022 20:44:31 -0000 https://gcc.gnu.org/g:47f89da89eb0ddc9ed87192886ff633a790fe08c commit r11-9652-g47f89da89eb0ddc9ed87192886ff633a790fe08c Author: Harald Anlauf Date: Tue Mar 8 21:47:04 2022 +0100 Fortran: do not frontend-optimize MINLOC/MAXLOC for character arrays gcc/fortran/ChangeLog: PR fortran/104811 * frontend-passes.c (optimize_minmaxloc): Do not attempt frontend-optimization of MINLOC/MAXLOC for character arrays, as there is no suitable code yet for inline expansion. gcc/testsuite/ChangeLog: PR fortran/104811 * gfortran.dg/minmaxloc_16.f90: New test. (cherry picked from commit e3e369dad6cbecb1b490b3f3b154c600fba5a6f3) Diff: --- gcc/fortran/frontend-passes.c | 1 + gcc/testsuite/gfortran.dg/minmaxloc_16.f90 | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c index b58cc249f23..ad1ba397803 100644 --- a/gcc/fortran/frontend-passes.c +++ b/gcc/fortran/frontend-passes.c @@ -2276,6 +2276,7 @@ optimize_minmaxloc (gfc_expr **e) if (fn->rank != 1 || fn->value.function.actual == NULL || fn->value.function.actual->expr == NULL + || fn->value.function.actual->expr->ts.type == BT_CHARACTER || fn->value.function.actual->expr->rank != 1) return; diff --git a/gcc/testsuite/gfortran.dg/minmaxloc_16.f90 b/gcc/testsuite/gfortran.dg/minmaxloc_16.f90 new file mode 100644 index 00000000000..099248df2e3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/minmaxloc_16.f90 @@ -0,0 +1,14 @@ +! { dg-do run } +! { dg-options "-fdump-tree-original" } +! PR fortran/104811 +! Frontend-optimization mis-optimized minloc/maxloc of character arrays + +program p + character(1) :: str(3) + str = ["a", "c", "a"] + if (any (maxloc (str) /= 2)) stop 1 + if (minloc (str,dim=1) /= 1) stop 2 +end + +! { dg-final { scan-tree-dump-times "_gfortran_maxloc0_4_s1" 1 "original" } } +! { dg-final { scan-tree-dump-times "_gfortran_minloc2_4_s1" 1 "original" } }