From patchwork Wed Jan 5 21:34:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sandra Loosemore X-Patchwork-Id: 49609 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 42E003858433 for ; Wed, 5 Jan 2022 21:35:46 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id 8C5363858033; Wed, 5 Jan 2022 21:34:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8C5363858033 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: bUmkgPDFEGh/FDKFljgFitrEg+g73hh4CZDE51d/k3Vw00KyLdSEx5RZhpvmDb4sLhMDCHuWzb geJCjfvsBl8fHvVYcBqdu28n62F2AyoqwQYMgLjfDIpQlf/Q14tWt/h7tHPgHRiOJ5aNLHuNBS uRNFuGtCC1G+lABJ25mvF2SzuZ6dhjFlgo9cV/UTBodiaaq4lw/B3f43He6lk4P3E5xvoKisyg BasWrw9eBDoQ4BYy9rwpnLQgIssu/nR83oZyf38VmD9f+BWC9As1YPEu/vsRC886Wo8ALlG3R1 r8kDNS0eWP8hLICkVwDOnaLz X-IronPort-AV: E=Sophos;i="5.88,264,1635235200"; d="scan'208";a="72974281" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa1.mentor.iphmx.com with ESMTP; 05 Jan 2022 13:34:34 -0800 IronPort-SDR: m/XghS/DPSoi0tTkyD9BxZZCWLE3E8S5xDHpi+3ydPH3GIpYTkhZBJoZjEzFpmYbi3hDsOWTUp 24oTRtgIVAgjsl0EB7peWnPvzQSvpZ56EsmqxO5rbru+qgLopwKua04LnAxkJ20yh/cRW3JUx4 yBLh2nuXyD5Xmlo6ZaInO7BBcK3tmAK597jxGtmPbXIDRIE7EZuFdbY2zO+DzQ8mTmMUkK8Xwa fKvQWxQTYd7ynoIHRr1NuS7BoqpGubNIEKcxOcqypAxt+MX7vzVlnwzwNWDGxAbapGM2Mxiw+E hPI= To: "fortran@gcc.gnu.org" From: Sandra Loosemore Subject: [PATCH] Fortran: Fix ICE in argument_rank_mismatch [PR103287] Message-ID: Date: Wed, 5 Jan 2022 14:34:27 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 Content-Language: en-US X-ClientProxiedBy: SVR-ORW-MBX-09.mgc.mentorg.com (147.34.90.209) To svr-orw-mbx-03.mgc.mentorg.com (147.34.90.203) X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_PASS, 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: , Cc: "gcc-patches@gcc.gnu.org" , Steve Kargl Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" One of my previous TS29113-related patches from last fall introduced an ICE due to a bogus assertion. This is the fix Steve suggested in the issue, bundled with the test cases, regression-tested, etc. OK to check in? -Sandra commit beaae3933ef62e4d52ec22c14a308295c0794683 Author: Sandra Loosemore Date: Wed Jan 5 13:18:10 2022 -0800 Fortran: Fix ICE in argument_rank_mismatch [PR103287] This patch removes an incorrect assertion. A user-friendly error for this case is already given elsewhere. 2022-01-05 Steve Kargl Sandra Loosemore PR fortran/103287 gcc/fortran/ * interface.c (argument_rank_mismatch): Replace incorrect assertion with return. gcc/testsuite/ * gfortran.dg/c-interop/pr103287-1.f90: new. * gfortran.dg/c-interop/pr103287-2.f90: new. diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 4be9583..0fd881d 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -2237,7 +2237,11 @@ argument_rank_mismatch (const char *name, locus *where, } else { - gcc_assert (rank2 != -1); + if (rank2 == -1) + /* This is an assumed rank-actual passed to a function without + an explicit interface, which is already diagnosed in + gfc_procedure_use. */ + return; if (rank1 == 0) gfc_error_opt (0, "Rank mismatch between actual argument at %L " "and actual argument at %L (scalar and rank-%d)", diff --git a/gcc/testsuite/gfortran.dg/c-interop/pr103287-1.f90 b/gcc/testsuite/gfortran.dg/c-interop/pr103287-1.f90 new file mode 100644 index 0000000..aeca52f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/c-interop/pr103287-1.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } + +subroutine g + call s([1]) +end +subroutine h(x) + integer, pointer :: x(..) + call s(x) ! { dg-error "Assumed-rank argument requires an explicit interface" } +end diff --git a/gcc/testsuite/gfortran.dg/c-interop/pr103287-2.f90 b/gcc/testsuite/gfortran.dg/c-interop/pr103287-2.f90 new file mode 100644 index 0000000..0e724b8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/c-interop/pr103287-2.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } + +subroutine g + call s(1) +end +subroutine h(x) + integer, pointer :: x(..) + call s(x) ! { dg-error "Assumed-rank argument requires an explicit interface" } +end