From patchwork Tue Sep 14 18:34:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 44994 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 75EFA3857C47 for ; Tue, 14 Sep 2021 18:35:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 75EFA3857C47 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1631644535; bh=sCM5JlilFgrCAQK5+l1hpAlpQuzB14NaWEftAkP+oXU=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=f/O/7OauSptzbCUxRb+Uh+EJKAnJnSQTsEuuRQvW+mOZb/tC1tpbqryE8wpweX0/S giNJv7/EedIpLzcC+FK3B6Qd1ysGb8GQsqVSxgVXC7OZH+aT3HplQem/hSy9EBHDwz ET4yXr/xW2EMUmKwmiC/4TRrq8W0eB57qzMY5DBw= 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.20]) by sourceware.org (Postfix) with ESMTPS id 885213858402; Tue, 14 Sep 2021 18:34:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 885213858402 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.7.109] ([79.251.7.109]) by web-mail.gmx.net (3c-app-gmx-bap28.server.lan [172.19.172.98]) (via HTTP); Tue, 14 Sep 2021 20:34:46 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH, committed] PR fortran/102311 - fix ICE during error recovery checking entry characteristics Date: Tue, 14 Sep 2021 20:34:46 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:IfA2DPgzGUwU6bbhyKiQRQcr5u2sFTOXBFWWkKMYfG/UEHRwdj5P7ks1XU57JFtZjxD0b +XBT+mlI9Q1D4dw1thLTZ65O3Ewl2hhqSR3iKr0GVEUqTp4+uGrAqLk8Y26C4LgbhW6+bAC5izZr 7aTqmhP+1JSIym3zdyR8PZmNAVe3EQREX4K1z/XLEwVf9cs3IOyQy5xaOzMhnccNqVcutnRXnJmg E6RGGmIk5xxpwCXatCdMndv3QycSuUK4J/Wwg8IdByeNJ3rnJ58EqlUU2ezbfDpdm9CHWy7CFEI8 n8= X-UI-Out-Filterresults: notjunk:1;V03:K0:PxFfpg0ydAM=:ZziHaIH0k8VX7ia9PVfvs5 7cvbJIU9reZSF+OF9R7bl6ED+eiBG6H/wbmueJQT8q0hFO99wDLBV0JTOzV4UC/72lR7g3f05 ZnDSUjEzHTb6tIoOdYs+T1SaOpUHVoS+OQPEi4RQPtvp6n4525ra+J5JSusiPugcbFL5SP8IV oGwzTS/BwefcUIBDK4yhZazA5PGDFjnVNCpQQYfcSWbmgHX+/FljdLHWBsgBujLhVNuiTUn7y wlealTHui6xyR1cAD3juP0CTgshnveIBc5wqOnh0yZVtCEoUKqOJ4AK+GYLauMcX6jJavKMj4 LR2pEl6yucszte1B1A2BzAwEvm4VGU0U/EjURd0mR5UvcWwJ1KoZ1DJ5pCpmP0GigIREA1lR7 ipcl3FwDTxgqJEdoR3LaJkWzagKNW88ENUvYMz+Bp0rMp2gHqPkaqZ5HKs6yeSBXnqoTR+8f+ Y1HEiAnBlhQONIZPIxXhJ9vsb5b48n1JeuLUsMbZ9F7gEQMr3S7AXrDhwalIxkNbzWglYAyMq OWyuMe1R9KktZJ1mOYtj6iqKHbDFrJRnblTYuR9238RXqQrxUW92BUJkamLcYFWb6tZXnLHhh H8r2nsvChI5wUiyf5CQbV4URZx4V7TTwG/9Swude4GbLDq1JM7hkHKlvSyuvZiuYV/I7+DWjK Ok0jJl9vpfr5HT7gYr+FcxiyANkdqfiI/OmcbfDJXf6vfGnK5koxPMREmV9bB90hkDs50/QdA 3d9awAr3OHml7SKMPpz91APUpPckyT7nGW3dREZCMqNn7lRpQbztloE1dB3QOK538k+BsLEWo dA4Y2s1 X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_MSPIKE_H3, 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" Committed as obvious as r12-3533. The fix to PR87737 did work for the given testcase, but could lead to a bad internal compiler state for a variation of the testcase. (Found by Gerhard...) The solution was to not return too early after emitting the error message but going through a 'cleanup' instead. Regtested on x86_64-pc-linux-gnu, and checked the testcase also with valgrind (to be on the safer side). Thanks, Harald Fortran - fix ICE during error recovery checking entry characteristics gcc/fortran/ChangeLog: PR fortran/102311 * resolve.c (resolve_entries): Attempt to recover cleanly after rejecting mismatched function entries. gcc/testsuite/ChangeLog: PR fortran/102311 * gfortran.dg/entry_25.f90: New test. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 8e5ed1c032c..30b96b2f597 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -811,7 +811,7 @@ resolve_entries (gfc_namespace *ns) gfc_error ("Function %s at %L has entry %s with mismatched " "characteristics", ns->entries->sym->name, &ns->entries->sym->declared_at, el->sym->name); - return; + goto cleanup; } else if (ts->type == BT_CHARACTER && ts->u.cl && fts->u.cl && (((ts->u.cl->length && !fts->u.cl->length) @@ -917,6 +917,8 @@ resolve_entries (gfc_namespace *ns) } } } + +cleanup: proc->attr.access = ACCESS_PRIVATE; proc->attr.entry_master = 1; diff --git a/gcc/testsuite/gfortran.dg/entry_25.f90 b/gcc/testsuite/gfortran.dg/entry_25.f90 new file mode 100644 index 00000000000..518560aa198 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/entry_25.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! PR fortran/102311 - ICE during error recovery checking entry characteristics + +module m +contains + function f() ! { dg-error "mismatched characteristics" } + character(:), allocatable :: f + character(1) :: g + f = 'f' + entry g() + g = 'g' + end +end