From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 124808 invoked by alias); 11 Feb 2020 14:41:31 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 124792 invoked by uid 89); 11 Feb 2020 14:41:31 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-20.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_COUK,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 spammy=HX-Languages-Length:3632 X-HELO: imap3.hz.codethink.co.uk Received: from imap3.hz.codethink.co.uk (HELO imap3.hz.codethink.co.uk) (176.9.8.87) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 11 Feb 2020 14:41:29 +0000 Received: from [167.98.27.226] (helo=[10.35.5.172]) by imap3.hz.codethink.co.uk with esmtpsa (Exim 4.92 #3 (Debian)) id 1j1Wj9-0002M9-3b; Tue, 11 Feb 2020 14:41:27 +0000 To: gcc-patches , fortran From: Mark Eggleston Subject: [9/10 Regression, PATCH] fortran: ICE in gfc_validate_kind(): Got bad kind [PR93580] Message-ID: <802db473-0383-5fe1-2493-4968b133312b@codethink.co.uk> Date: Tue, 11 Feb 2020 14:41:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------256456F3BE537D13ED392227" X-SW-Source: 2020-02/txt/msg00649.txt.bz2 This is a multi-part message in MIME format. --------------256456F3BE537D13ED392227 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-length: 997 Please find attached a patch, it is based on Steve Kargl's patch in PR93580 adding  a check for %len and test case. The commit message in the patch includes change logs as I believe that is the intended way forward. One thing I'm unsure of it how handle multiple authors, it was easy in the ChangeLog files but it is not obvious for git commit messages. OK for master and gcc 9 branch? gcc/fortran/ChangeLog:     Steven G. Kargl      Mark Eggleston      PR fortran/93580     * primary.c (gfc_match_varspec): If the symbol following %     is re or im and the primary expression type is not BT_COMPLEX     issue an error. If the symbol is len and the primary     expression type is not BT_CHARACTER is an error. gcc/testsuite/ChangeLog:     Mark Eggleston     PR fortran/93580     * gfortran.dg/dg/pr93580.f90: New test. -- https://www.codethink.co.uk/privacy.html --------------256456F3BE537D13ED392227 Content-Type: text/x-patch; charset=UTF-8; name="0001-fortran-ICE-using-undeclared-symbol-in-array-constru.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-fortran-ICE-using-undeclared-symbol-in-array-constru.pa"; filename*1="tch" Content-length: 2651 >From 4a3db68ce1fc8696b0108b4b0633c1f0959dac80 Mon Sep 17 00:00:00 2001 From: Mark Eggleston Date: Tue, 11 Feb 2020 08:35:02 +0000 Subject: [PATCH] fortran: ICE using undeclared symbol in array constructor PR93484 Using undeclared symbol k in an expression in the following array constructor results in an ICE: print *, [real(x(k))] If the call to the intrinsic is not in a constructor a no IMPLICIT type error is reported and the ICE does not occur. Matching on an expression instead of an initialisation express an and not converting a MATCH_ERROR return value into MATCH_NO results in the no IMPLICIT error and no ICE. Note: Steven G. Kargl is the author of the changes except for the test cases. gcc/fortran/ChangeLog: PR fortran/93484 * match.c (gfc_match_type_spec): Replace gfc_match_init_expr with gfc_match_expr. Return m if m is MATCH_NO or MATCH_ERROR. gcc/testsuite PR fortran/93484 * gfortran.dg/pr93484_1.f90: New test. * gfortran.dg/pr93484_2.f90: New test. --- gcc/fortran/match.c | 4 ++-- gcc/testsuite/gfortran.dg/pr93484_1.f90 | 8 ++++++++ gcc/testsuite/gfortran.dg/pr93484_2.f90 | 8 ++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr93484_1.f90 create mode 100644 gcc/testsuite/gfortran.dg/pr93484_2.f90 diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index a74cb8c5c19..03adfca9bd9 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -2222,9 +2222,9 @@ gfc_match_type_spec (gfc_typespec *ts) found: - m = gfc_match_init_expr (&e); + m = gfc_match_expr (&e); if (m == MATCH_NO || m == MATCH_ERROR) - return MATCH_NO; + return m; /* If a comma appears, it is an intrinsic subprogram. */ gfc_gobble_whitespace (); diff --git a/gcc/testsuite/gfortran.dg/pr93484_1.f90 b/gcc/testsuite/gfortran.dg/pr93484_1.f90 new file mode 100644 index 00000000000..3b6dbc9ad79 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr93484_1.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! +program p + implicit none + integer :: x(4) = [1,2,3,4] + print *, [real(x(k))] ! { dg-error "Symbol 'k' at .1. has no IMPLICIT type" } +end + diff --git a/gcc/testsuite/gfortran.dg/pr93484_2.f90 b/gcc/testsuite/gfortran.dg/pr93484_2.f90 new file mode 100644 index 00000000000..4a7f4330ed9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr93484_2.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! +program p + implicit none + integer, parameter :: x(4) = [1,2,3,4] + print *, [real(x(k))] ! { dg-error "Symbol 'k' at .1. has no IMPLICIT type" } +end + -- 2.11.0 --------------256456F3BE537D13ED392227--