From patchwork Thu Jan 13 20:56:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 50000 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7CBC83857C4F for ; Thu, 13 Jan 2022 20:56:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7CBC83857C4F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1642107415; bh=uPM1TAkReCYATIhcaj6NDwez3NGivqKkoLyWujx/7pQ=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=slYd5ljDQzJp5xFvZIc5I/8Z2XLkOWrWbeZ5jCJ4YlIr1xDRMmsoa6y4ThnBDc5NK nfS8uIgNRHeyMNH/oMA0ZrWyo86UrISNlSxthQoLWCS005BNL4N/wd91fg93F0B5pV PVu9brBtj/qByS0debLXfQXB1EdYOUSoHllY2td0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by sourceware.org (Postfix) with ESMTPS id E189D385840B; Thu, 13 Jan 2022 20:56:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E189D385840B X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.80.238] ([93.207.80.238]) by web-mail.gmx.net (3c-app-gmx-bap02.server.lan [172.19.172.72]) (via HTTP); Thu, 13 Jan 2022 21:56:24 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/103782 - [9/10/11/12 Regression] internal error occurs when overloading intrinsic Date: Thu, 13 Jan 2022 21:56:24 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:qfnYotbDLOt2dTe6BJbnACDWQWaZ1O3/DJA0Y02sYXWn+XE42/gHlE7vVTz8XJOHjP5nO JZtovxWyrZZFc+TPpKMlnJdGGfwam/h3XkD9JCYFiwzWUSFWAEXZSxs0TUZeV/dmakMMSSWa8qHE 43m95mH2BP+e1xwenAUh8bowqByq9N6X2UkhW3lq44qcpfPJ3ynq+QmmXZmFMId0u+U2QFnLUISJ 3MNWAzqIoJ7poj8b2NsiT89Ib3kartGF2c6auMc2FGXbT0KGy7eOgb72hLTmMrm7J4nkWbFRyA7b y0= X-UI-Out-Filterresults: notjunk:1;V03:K0:B27ySbODAjg=:bDKBidIaaS8ZjrR4xO8HX4 kERy2BPNh/nZJVwI//4JzVzS2RNd765lGz4LMjizX+G9QWbDktPQxR4VUBuXeZsF9fkJVoNm+ 9wqeJXBqiZmLXdF4PLChHQdjp5Dxyf0JJ6l6R+H0WToCu7K8pt/zxBPWx503DnHzlFCYAgn6F AnOlxevUe+st9QXoC15SuKiPOBdbOuj86U7Cy5hASu9YQE1v0EQy6oZXToa/cmn8Lb+MvEiAs GYCdbLu0/KpJ+oqd+wL+/swkh5LZf3a0JUoPzupypsV6XdLcVqP4f7GPRRnFIrcZdf6DO2S39 +Lyy53rbIMPIblMZDlnXV+A2L9Vv2MmvSeiONvsW4zGNxWglHgOFbQi24E08+BEor/6r2ef9i DPRB/GG6PofrOBaqbi4BmVZyOG0lU0GxVf8QzBW6sYp1SsSCpSpPKoCv9sTZnJc9LtoQqxm0j jgEDhKCpLmkJW9MSovoQOhXERL2s0d1APF6EwBmEyff1dPu2qeR1gCSGJTqiPC+3qgUNFITRS MO+x8wVuZXYeHaExt6DQHgwXU7MPump0n9QHPXtHfldv2L0ZLfV7vpE5H0H6wdV+5c6l6C7fC ruKEpNFR6rA7MBnynF9FT0nuSbDuGsS7cFS53GyIk7GoIFZoCRyGpvFfUbKQN9ucOHeio6WJa 51lixAmBV8OFcTc1+1ouNbS0wBG3S/BSigczDwpaRa6tkrMEJLpxCTHlhnu6vTXY/6rv0t+HX LFWKfdNSC8oHZiM8PoW08En3Ci3lY7DdwCLFttGqt+9AKBYKJRNoqvGdrRZDKk2Mm9u/6CjNw vh68PQn X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Harald Anlauf via Gcc-patches From: Harald Anlauf Reply-To: Harald Anlauf Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Dear all, there was a regression handling overloaded elemental intrinsics, leading to an ICE on valid code. Reported by Urban Jost. The logic for when we need to scalarize a call to an intrinsic seems to have been broken during the 9-release. The attached patch fixes the ICE and seems to work on the extended testcase as well as regtests fine on x86_64-pc-linux-gnu. OK for mainline? Backport to affected branches? Thanks, Harald From 5b914bef991528aebfe9734b4e7af7bae039e66a Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Thu, 13 Jan 2022 21:50:45 +0100 Subject: [PATCH] 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. --- gcc/fortran/expr.c | 5 ++--- gcc/testsuite/gfortran.dg/overload_4.f90 | 27 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/overload_4.f90 diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index a87686d8217..20b88a8ef56 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -2219,10 +2219,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 -- 2.31.1