From patchwork Fri May 29 20:48:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 1301007 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=gmx.net header.i=@gmx.net header.a=rsa-sha256 header.s=badeba3b8450 header.b=EbakUlsL; dkim-atps=neutral Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49Yc9g4mMSz9sRY for ; Sat, 30 May 2020 06:48:54 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B0D9E39874F0; Fri, 29 May 2020 20:48:49 +0000 (GMT) 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.21]) by sourceware.org (Postfix) with ESMTPS id 02F463851C01; Fri, 29 May 2020 20:48:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 02F463851C01 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=anlauf@gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1590785324; bh=jY/VDqVSuWG8st95frS4nGU6nxIAmQ4TN0InqO+bl8s=; h=X-UI-Sender-Class:From:To:Subject:Date; b=EbakUlsLVnCxz/6cRrpZfSPTHTexRPicRHtmR8mn5xYBYYLUNAwjDXpxnZZVGeLxP R0ygET2gG4r+cxklbxx4iBm1ilQkskrA6Mcb6KAZhzm3P99ZGUOdkqjzHRO+M4TPo+ nS1Hx89egsPPzppZctc5F9nCYpXqiyxYFkJJE5ug= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.89.181] ([93.207.89.181]) by web-mail.gmx.net (3c-app-gmx-bap60.server.lan [172.19.172.130]) (via HTTP); Fri, 29 May 2020 22:48:44 +0200 MIME-Version: 1.0 Message-ID: From: "Harald Anlauf" To: fortran , gcc-patches Subject: [PATCH, part2] PR fortran/95373 - [9/10/11 Regression] ICE in build_reference_type, at tree.c:7942 Date: Fri, 29 May 2020 22:48:44 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:g+KTgeTqQ9SO1mvUvs0WD9hQ2Vghs3ml8vSDPMxQKZJRjHRcmuh2KcDUKC0jIneRRU8Og oZRi86Udnx7Cc1k+1sX93Up4FCn4Wh6yuBR7SJyA+Gt40+jxdi4PNzrbnnvdwURLBP8mCL+Q7gBl C6icpLsfkTp9FIVt4ukF0mZvKcAZl0XoYB8zy2Nf3nZ3dJ3HdRFfsEgQ6Blc1wAiIAeLxdDu7N+b j2odUyIPgs2a6mJAqjcb3+WFuH0CdgWvFYniMUNhBncQXRjyP1cSr/gMiONBdqODHYpHXVnLGZma cY= X-UI-Out-Filterresults: notjunk:1;V03:K0:DcDbKdeAH/g=:rq1+9hPQYWVuzmLn8Ys5yD Y7Dl8BNBM7DsBPzbppT3pBUXkDXEem0jKU7v/3nfGcVBfmg6+1s80LX0JqHb2Y78n8uFdKliC ngi8r/rUA+8Q8I395KoOyJNdrkdJfk+Bo/c93eUQyTYOpSWDR49o9xDicAOyDjN3980587BvB PtxVQZ7t4erugddcKp2fra3NCEZEgXz+vxKEF32bukrDmC6+bVoWs1nN6avWE/N5Ezf90IFdi +4oHc+ldAQwIpp0ul2dWlpEja0jpv6GhUcZ9hLo9OgE4sj1mbka8JCgUYY5R6DvSQmFOSayP6 RamFyOjRhZdK3B0hWIDT5zxmVzxHncdWySSXtwhrUydOnl2V8s46GlxHFEbdCdhzX5k19KNQu LdE/lavIB5ryYiJgsgWfHIfmvW/2claV5MWICRxLQwbcI/1K29iQLOUzSRv+3ib0t00FNd9kL 7UbRD5gUa+XxC0e+sSOkG72VpmAv5jIV3sRxLO0ekalpEf26SCSCvmQmHJXnupK463uyHj1G8 /qzpRikY0muiH2CQH+4uIz3YPq2a9eLYmquf77vGm0F6Gzi1IPuJ2KH0LsFaXfPtlJIDGQm3n 9r8dD89flasuTt7Me1qB3CHNvDoNA7mB9c/ygf4TRC3qDW/A8JDMwbECfH2CNCs6csf2ojmDq UniQBXeljz4y5C8vVqnCtQONACH4s72nOFG/AlkGIvNOIgwsy56F4MXwSuqXFmeTktTc= X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, 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: 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: , Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" The initial attempt to fix this PR unfortunately produced a regression in the testsuite that was overlooked. The real fix is to apply this check in the appropriate place. Regtested on x86_64-pc-linux-gnu. Really. OK for master and backports? Thanks, Harald PR fortran/95373 - ICE in build_reference_type, at tree.c:7942 The use of KIND, LEN, RE, and IM inquiry references for applicable intrinsic types is valid only for suffienctly new Fortran standards. Add appropriate checks in the appropriate place. 2020-05-28 Harald Anlauf gcc/fortran/ PR fortran/95373 * primary.c (is_inquiry_ref): Move validity check of inquiry references against selected Fortran standard from here... (gfc_match_varspec) ...to here. gcc/testsuite/ PR fortran/95373 * gfortran.dg/pr95373_1.f90: Adjust error messages. * gfortran.dg/pr95373_2.f90: Adjust error message. diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 67105cc9ab1..7c221c8d209 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1998,28 +1998,6 @@ is_inquiry_ref (const char *name, gfc_ref **ref) else return false; - switch (type) - { - case INQUIRY_RE: - case INQUIRY_IM: - if (!gfc_notify_std (GFC_STD_F2008, "RE or IM part_ref at %C")) - return false; - break; - - case INQUIRY_KIND: - if (!gfc_notify_std (GFC_STD_F2003, "KIND part_ref at %C")) - return false; - break; - - case INQUIRY_LEN: - if (!gfc_notify_std (GFC_STD_F2003, "LEN part_ref at %C")) - return false; - break; - - default: - gcc_unreachable (); - } - if (ref) { *ref = gfc_get_ref (); @@ -2267,6 +2245,27 @@ gfc_match_varspec (gfc_expr *primary, int equiv_flag, bool sub_flag, { if (tmp) { + switch (tmp->u.i) + { + case INQUIRY_RE: + case INQUIRY_IM: + if (!gfc_notify_std (GFC_STD_F2008, + "RE or IM part_ref at %C")) + return MATCH_ERROR; + break; + + case INQUIRY_KIND: + if (!gfc_notify_std (GFC_STD_F2003, + "KIND part_ref at %C")) + return MATCH_ERROR; + break; + + case INQUIRY_LEN: + if (!gfc_notify_std (GFC_STD_F2003, "LEN part_ref at %C")) + return MATCH_ERROR; + break; + } + if ((tmp->u.i == INQUIRY_RE || tmp->u.i == INQUIRY_IM) && primary->ts.type != BT_COMPLEX) { diff --git a/gcc/testsuite/gfortran.dg/pr95373_1.f90 b/gcc/testsuite/gfortran.dg/pr95373_1.f90 index f39b6a72346..59a9e7a81e0 100644 --- a/gcc/testsuite/gfortran.dg/pr95373_1.f90 +++ b/gcc/testsuite/gfortran.dg/pr95373_1.f90 @@ -4,12 +4,12 @@ subroutine s (x) complex, parameter :: z = 3 - real(z% kind) :: x ! { dg-error "nonderived-type variable" } + real(z% kind) :: x ! { dg-error "Fortran 2003: KIND part_ref" } type t real :: kind logical :: re end type t type(t) :: b print *, b% kind, b% re - print *, z% re ! { dg-error "nonderived-type variable" } + print *, z% re ! { dg-error "Fortran 2008: RE or IM part_ref" } end diff --git a/gcc/testsuite/gfortran.dg/pr95373_2.f90 b/gcc/testsuite/gfortran.dg/pr95373_2.f90 index 2a654b43faa..b0f3da0a20d 100644 --- a/gcc/testsuite/gfortran.dg/pr95373_2.f90 +++ b/gcc/testsuite/gfortran.dg/pr95373_2.f90 @@ -11,5 +11,5 @@ subroutine s (x) end type t type(t) :: b print *, b% kind, b% re - print *, z% re ! { dg-error "nonderived-type variable" } + print *, z% re ! { dg-error "Fortran 2008: RE or IM part_ref" } end