From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2071) id 1E8023850439; Wed, 22 Mar 2023 18:00:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1E8023850439 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1679508019; bh=3cPqkeHWCBIWFXzw7kVSsI7LReB+jwD5WN0p9ORzzNA=; h=From:To:Subject:Date:From; b=vD6VX6cDlDHkPAGyiSE9pFOK0nnBIG3oX3YOODE50EuH/Vf9b4pBUwTzwh3IyuFxE TfmuYhTJrozfftPUb8sneY0uAR6Id2M2ti2GSUZ6rgq4Cx7Zt3L5q5urDUi5vK81NM o/T9/c+RviXIWTV8qjm77KU7xP+RI1G2WfEVLN7A= 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 r12-9311] Fortran: reject MODULE PROCEDURE outside generic module interface [PR99036] X-Act-Checkin: gcc X-Git-Author: Harald Anlauf X-Git-Refname: refs/heads/releases/gcc-12 X-Git-Oldrev: f1342c21b2acbdd1daa0f2519154f8ac911a800f X-Git-Newrev: 7eb94c5adfd85c38e4ed7a7fff74b59087ddb813 Message-Id: <20230322180019.1E8023850439@sourceware.org> Date: Wed, 22 Mar 2023 18:00:19 +0000 (GMT) List-Id: https://gcc.gnu.org/g:7eb94c5adfd85c38e4ed7a7fff74b59087ddb813 commit r12-9311-g7eb94c5adfd85c38e4ed7a7fff74b59087ddb813 Author: Harald Anlauf Date: Tue Mar 21 19:58:31 2023 +0100 Fortran: reject MODULE PROCEDURE outside generic module interface [PR99036] gcc/fortran/ChangeLog: PR fortran/99036 * decl.cc (gfc_match_modproc): Reject MODULE PROCEDURE if not in a generic module interface. gcc/testsuite/ChangeLog: PR fortran/99036 * gfortran.dg/pr99036.f90: New test. (cherry picked from commit dd282b16bfd3c6e218dffb7798a375365b10ae22) Diff: --- gcc/fortran/decl.cc | 7 ++++--- gcc/testsuite/gfortran.dg/pr99036.f90 | 9 +++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index b6400514731..b89ed17be50 100644 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -9984,9 +9984,10 @@ gfc_match_modproc (void) gfc_namespace *module_ns; gfc_interface *old_interface_head, *interface; - if ((gfc_state_stack->state != COMP_INTERFACE - && gfc_state_stack->state != COMP_CONTAINS) - || gfc_state_stack->previous == NULL + if (gfc_state_stack->previous == NULL + || (gfc_state_stack->state != COMP_INTERFACE + && (gfc_state_stack->state != COMP_CONTAINS + || gfc_state_stack->previous->state != COMP_INTERFACE)) || current_interface.type == INTERFACE_NAMELESS || current_interface.type == INTERFACE_ABSTRACT) { diff --git a/gcc/testsuite/gfortran.dg/pr99036.f90 b/gcc/testsuite/gfortran.dg/pr99036.f90 new file mode 100644 index 00000000000..a6e396f6f71 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr99036.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR fortran/99036 - ICE in gfc_current_interface_head +! Contributed by G. Steinmetz + +module m +contains + module procedure s ! { dg-error "must be in a generic module interface" } + end +end