From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2071) id A172B3858D28; Sun, 23 Jan 2022 21:53:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A172B3858D28 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 r9-9923] Fortran: fix ICE overloading elemental intrinsics X-Act-Checkin: gcc X-Git-Author: Harald Anlauf X-Git-Refname: refs/heads/releases/gcc-9 X-Git-Oldrev: f08b681126d51f7d4d8ba7513f818896afff5bbe X-Git-Newrev: 7fecbf36d174c8005e8c5cfb7089c6bd4d0f6a79 Message-Id: <20220123215323.A172B3858D28@sourceware.org> Date: Sun, 23 Jan 2022 21:53:23 +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, 23 Jan 2022 21:53:23 -0000 https://gcc.gnu.org/g:7fecbf36d174c8005e8c5cfb7089c6bd4d0f6a79 commit r9-9923-g7fecbf36d174c8005e8c5cfb7089c6bd4d0f6a79 Author: Harald Anlauf Date: Thu Jan 13 21:50:45 2022 +0100 Fortran: fix ICE overloading elemental intrinsics gcc/fortran/ChangeLog: PR fortran/103782 * expr.c (gfc_simplify_expr): Adjust logic for when to scalarize a call of an intrinsic which may have been overloaded. gcc/testsuite/ChangeLog: PR fortran/103782 * gfortran.dg/overload_4.f90: New test. (cherry picked from commit a4a8ae123cd70188e4b4bf5e288a84e0a76fb0fd) Diff: --- gcc/fortran/expr.c | 5 ++--- gcc/testsuite/gfortran.dg/overload_4.f90 | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index f099da98ab0..7b61488bfe9 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -2143,10 +2143,9 @@ gfc_simplify_expr (gfc_expr *p, int type) && gfc_intrinsic_func_interface (p, 1) == MATCH_ERROR) return false; - if (p->expr_type == EXPR_FUNCTION) + if (p->symtree && (p->value.function.isym || p->ts.type == BT_UNKNOWN)) { - if (p->symtree) - isym = gfc_find_function (p->symtree->n.sym->name); + isym = gfc_find_function (p->symtree->n.sym->name); if (isym && isym->elemental) scalarize_intrinsic_call (p, false); } diff --git a/gcc/testsuite/gfortran.dg/overload_4.f90 b/gcc/testsuite/gfortran.dg/overload_4.f90 new file mode 100644 index 00000000000..43207e358ba --- /dev/null +++ b/gcc/testsuite/gfortran.dg/overload_4.f90 @@ -0,0 +1,27 @@ +! { dg-do run } +! { dg-additional-options "-Wno-intrinsic-shadow" } +! PR fortran/103782 - ICE overloading an intrinsic like dble or real +! Contributed by Urban Jost + +program runtest + implicit none + interface dble + procedure to_double + end interface dble + interface real + procedure floor ! not really FLOOR... + end interface real + if (any (dble ([10.0d0,20.0d0]) - [10.0d0,20.0d0] /= 0.d0)) stop 1 + if (any (real ([1.5,2.5]) - [1.5,2.5] /= 0.0 )) stop 2 +contains + elemental function to_double (valuein) result(d_out) + doubleprecision,intent(in) :: valuein + doubleprecision :: d_out + d_out=valuein + end function to_double + elemental function floor (valuein) result(d_out) ! not really FLOOR... + real, intent(in) :: valuein + real :: d_out + d_out=valuein + end function floor +end program runtest