From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id A1AF138708CE; Fri, 19 Feb 2021 16:00:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A1AF138708CE Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=Tobias_Burnus@mentor.com IronPort-SDR: UtfrjwWUKiTpRExssgBwLJDDZZWCSKL8fsA+/U1j2a6CDGgDW7MaVXF2o1ejFgQrlX7ethSq+V ahbLQQKpQ6tk9hhZoMVFg7702BNedQcdfoyI0wkGXFitCWOs3NXZwrp+WSuJyfO1xY6dNM9JGO IZx7sSnlFH4m2q93AdYr6CMaGcg8WZ2PUtRF1HoP7xZ2nEJgvyIzzKhri+VqPnOxT6UdGzA5U2 Wxv001aCBHB2a4eIcbfejP13BquVcwjUgu+q9Cz3temNIFrcXpslciu9qGjOp805AVm0RCQc0o A8A= X-IronPort-AV: E=Sophos;i="5.81,189,1610438400"; d="diff'?scan'208";a="58431068" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 19 Feb 2021 08:00:32 -0800 IronPort-SDR: 0NByfmONGx48oyRoRYNoD2YOkdqYyvUm2i2HYO5DF0td8w5KkVNILqfaNzh7V8H+JQL6Gt80O5 ++G/JBuH4EFzcMw1kPsX1Q97kVR9Gwbjjmn01HE/iNZqkHYI60qKmosqRGt3AO6l3QMeaHMGo5 0DHMaP5xgSeamse9sljmIWYdKOwhXSqk0CRhIl9/Zt7q89JcnwP0ShGswSMzxk+l98/bo+QRPf iNv/s7YsmFiVpG/RlFHDkAWbVs4eFFq+1zEmVGrq5vRl5nmHFtjiPHkAVoJfrI1tk211pBrsXe J5c= To: gcc-patches , fortran , Jerry DeLisle From: Tobias Burnus Subject: [Patch] Fortran: Fix DTIO with type ICE [PR99146] Message-ID: Date: Fri, 19 Feb 2021 17:00:27 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------837962E7419ECCF045EAEF6D" Content-Language: en-US X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: SVR-IES-MBX-08.mgc.mentorg.com (139.181.222.8) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-12.1 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.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Feb 2021 16:00:38 -0000 --------------837962E7419ECCF045EAEF6D Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: quoted-printable In this example, the formal argument is a derived type and not a class =E2=80=93 hence, there is an ICE. OK for the trunk? Tobias ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 M=C3=BCnchen R= egistergericht M=C3=BCnchen HRB 106955, Gesch=C3=A4ftsf=C3=BChrer: Thomas H= eurung, Frank Th=C3=BCrauf --------------837962E7419ECCF045EAEF6D Content-Type: text/x-patch; charset="UTF-8"; name="dtio.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="dtio.diff" Fortran: Fix DTIO with type ICE [PR99146] gcc/fortran/ChangeLog: PR fortran/99146 * interface.c: gcc/testsuite/ChangeLog: PR fortran/99146 * gfortran.dg/dtio_36.f90: New test. gcc/fortran/interface.c | 4 +++- gcc/testsuite/gfortran.dg/dtio_36.f90 | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 87fe14280e6..f7ca52e6550 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -5305,7 +5305,9 @@ gfc_find_specific_dtio_proc (gfc_symbol *derived, bool write, bool formatted) } finish: - if (dtio_sub && derived != CLASS_DATA (dtio_sub->formal->sym)->ts.u.derived) + if (dtio_sub + && dtio_sub->formal->sym->ts.type == BT_CLASS + && derived != CLASS_DATA (dtio_sub->formal->sym)->ts.u.derived) gfc_find_derived_vtab (derived); return dtio_sub; diff --git a/gcc/testsuite/gfortran.dg/dtio_36.f90 b/gcc/testsuite/gfortran.dg/dtio_36.f90 new file mode 100644 index 00000000000..4e53581b86a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dtio_36.f90 @@ -0,0 +1,33 @@ +! { dg-do compile } +! +! PR fortran/99146 +! + MODULE p + TYPE :: person + sequence + END TYPE person + INTERFACE READ(UNFORMATTED) + MODULE PROCEDURE pruf + END INTERFACE + + CONTAINS + + SUBROUTINE pruf (dtv,unit,iostat,iomsg) + type(person), INTENT(INOUT) :: dtv + INTEGER, INTENT(IN) :: unit + INTEGER, INTENT(OUT) :: iostat + CHARACTER (LEN=*), INTENT(INOUT) :: iomsg + iostat = 1 + END SUBROUTINE pruf + + END MODULE p + + PROGRAM test + USE p + TYPE (person) :: chairman + + OPEN (UNIT=71, status = 'scratch', FORM='UNFORMATTED') + + read(71) chairman + + END PROGRAM test --------------837962E7419ECCF045EAEF6D--