From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id 9A7BA3858D37; Tue, 21 Mar 2023 08:31:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 9A7BA3858D37 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.98,278,1673942400"; d="scan'208";a="102470841" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa2.mentor.iphmx.com with ESMTP; 21 Mar 2023 00:31:07 -0800 IronPort-SDR: WNzAx6tR/r2eAquzTgXzdGmHlnU+lUYX6MxwvfkiQzukN0HpMKUqK2ld5KSCFdRPMCQH7bOrB+ o4D/m7/Wn/nPohDdHradIkMJVE2u0PsNxIAyqIHFKuM1D8LMxoKd1kXl1PbDjIKXg7KKSAAfBA 7DCznnTdXHfjurtsSePbUKjDsKYaAJs+Cc5voPxoG6uBp4WNPD+++6qnubpi/EtxOF2+6V/SA8 MNKsBsinTRCo5z0G3mgI7pRyuVj0hzG3zK0ZckdsxI178/xbYUaZFRIb1S35h/4l1Jutt4nvSl i80= Message-ID: <7f9d0dc1-21d8-5b55-dc66-a12a5f8c114a@codesourcery.com> Date: Tue, 21 Mar 2023 09:31:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Subject: Re: [PATCH] Fortran: reject MODULE PROCEDURE outside generic module interface [PR99036] To: Harald Anlauf , fortran , gcc-patches References: Content-Language: en-US From: Tobias Burnus In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,NICE_REPLY_A,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 20.03.23 21:57, Harald Anlauf via Gcc-patches wrote: > --- a/gcc/fortran/decl.cc > +++ b/gcc/fortran/decl.cc > @@ -9998,6 +9998,7 @@ gfc_match_modproc (void) > if ((gfc_state_stack->state !=3D COMP_INTERFACE > && gfc_state_stack->state !=3D COMP_CONTAINS) > || gfc_state_stack->previous =3D=3D NULL > + || !current_interface.type > || current_interface.type =3D=3D INTERFACE_NAMELESS > || current_interface.type =3D=3D INTERFACE_ABSTRACT) > { First, I do not like '!var' comparisons for enum values, only for Booleans/logicals and pointer. Secondly, I am not sure that it is really guaranteed that the value is 0. I think something like the following makes more sense and, as just tried, it also regtests (w/ your testcase included). If you agree, feel free to package and commit it. diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index c8f0bb83c2c..233bf244d62 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -9996,7 +9996,8 @@ gfc_match_modproc (void) gfc_interface *old_interface_head, *interface; - if ((gfc_state_stack->state !=3D COMP_INTERFACE - && gfc_state_stack->state !=3D COMP_CONTAINS) - || gfc_state_stack->previous =3D=3D NULL + if (gfc_state_stack->previous =3D=3D NULL + || (gfc_state_stack->state !=3D COMP_INTERFACE + && (gfc_state_stack->state !=3D COMP_CONTAINS + || gfc_state_stack->previous->state !=3D COMP_INTERFACE)) || current_interface.type =3D=3D INTERFACE_NAMELESS || current_interface.type =3D=3D INTERFACE_ABSTRACT) Thanks for working on this and all the other issues! Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955