From patchwork Mon Dec 6 22:39:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 48565 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C953E385842A for ; Mon, 6 Dec 2021 22:40:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C953E385842A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1638830434; bh=DM3DDAINmBbHH5nQgIWpaW8X6DOyVqCj2y8BfrnU7AY=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=dqEbNd4WMaxm1HpQOwuO2tJ2eDH8aVLRXSHt+EmoKw2Fg7kcfCXSoG7DkViy6rZrq +HUYq0QyfYzT9u0UnHJpakETzodCL6PFXakOLlR/nNyB6goesL3/Ot0tO1wF6kt+L5 6aJul7wq2Gpz4L+8d49znhcBDWvqdL50afFshhnw= 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.20]) by sourceware.org (Postfix) with ESMTPS id 9D4053858D28; Mon, 6 Dec 2021 22:39:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 9D4053858D28 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.86.118] ([93.207.86.118]) by web-mail.gmx.net (3c-app-gmx-bap31.server.lan [172.19.172.101]) (via HTTP); Mon, 6 Dec 2021 23:39:47 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/103588 - ICE: Simplification error in gfc_ref_dimen_size, at fortran/array.c:2407 Date: Mon, 6 Dec 2021 23:39:47 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:0HLhlYxscnSItD9cFagAQk9M96l0/Uok1MGAaU2QwY7/2mvxMzKx7wKasu503qsq51PPQ dziXwGvi2PNPSgQmjG4/ZA+Y4gUCvu0SZrCCfkhElCaoTW20mhWg179j6P+BH1PqCRDbe8K+sFEt fruM1FmzsJeY/shksDy7J/mNx7AYJuA+qbdjqCK5LDok6xuuWYZoPK5Gr4y0k6KThMPLwPeb1FNd jIbvEq+1claO0KUl92wnvgWjPayCvZRI9OdLbIVAMVLIPly3u7pXpxkqKi2zOCGQzPh+D8aQ57Bp Cg= X-UI-Out-Filterresults: notjunk:1;V03:K0:V81H+MzYQvU=:Q5UBGmSSHIuVvLfrILf3rK mKwZxwygxsJlP4KgASZH2wy9Ox9TfIpAVx0kilf2GOY7AC7/DmuoCOuaXVucZXWMi6smfEb4C J+v7hSd6uCHRSHH6zi4U8VgeZ6P+nx/na7cKnDNplR622HM/JbE67OqZmD/dGJ4eFqO0tbSIz wLw/1BKTfBmS2TxpGXxpwi+VDYaSNtdGEAh33c05qX7fRyFo3WbgRxbpppwpYyjSzs4oncOrC U7v8XqepMJc1v5Clj8uRNyldK5moKDm10UwwkP/X4DcYR4/gym8YLS2LliiggQ2B3ajNgTimw c1j8KNV/vy2VEaDBPbYgwBDxgQMTMRLSQEq0tZr+mp1+/yAq9Q+taNcPS8b670nBnVWCJTMLJ RIT6x/AKajJBLMIDLHEoZ4Hy+oN3SefBuntpltM6q84gu9B700wauJst+ZdtrkXffSW9dnL5s wGiDKg8P2e6HWTok0uf/2DFrcRkM/BcEAKjqkvb0IhB60CIGkcXlriqTi4USfj7mYPPt0jDWp nW63GcF/0TUDHm5H29E3i+WbAVpgW9uiwY8CQIkmVBTIzXslD7JCf+6Wmyyx0h9dPMDYakNKs 3uqkyxTbPl7xuaFhhNNGXWTqtNwTLvGYZRgw1x2qOP0Fip52EwFQDGNqgm8HHfnnx9wVdkuFT 3kc4xB9/eR6Ynx9Rr6AD6Uuh2qTge1iEbkGuQScSYzElvIGwjWOQldlNFFjkbivqJmjLsFdIx 3fZUQ89MC0YR7W67vLt3fowjlTGPAXlpL7qX08TQCkfAHbj9paQWv+1AB+MGPao7T6QkH5gK1 GyPR6Lv X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: , X-Patchwork-Original-From: Harald Anlauf via Gcc-patches From: Harald Anlauf Reply-To: Harald Anlauf Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Dear all, using a bad expression as stride in a subsequent array section did lead to an internal error which was directly invoked after the failure. We better return a failure code to let error recovery do its expected job. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald From 1487d327b13b45acca79c0c691a748ca1a50bc04 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Mon, 6 Dec 2021 23:34:17 +0100 Subject: [PATCH] Fortran: catch failed simplification of bad stride expression gcc/fortran/ChangeLog: PR fortran/103588 * array.c (gfc_ref_dimen_size): Do not generate internal error on failed simplification of stride expression; just return failure. gcc/testsuite/ChangeLog: PR fortran/103588 * gfortran.dg/pr103588.f90: New test. --- gcc/fortran/array.c | 8 +++----- gcc/testsuite/gfortran.dg/pr103588.f90 | 8 ++++++++ 2 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr103588.f90 diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index 5762c8d92d4..5f9ed17f919 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -2403,11 +2403,9 @@ gfc_ref_dimen_size (gfc_array_ref *ar, int dimen, mpz_t *result, mpz_t *end) { stride_expr = gfc_copy_expr(ar->stride[dimen]); - if(!gfc_simplify_expr(stride_expr, 1)) - gfc_internal_error("Simplification error"); - - if (stride_expr->expr_type != EXPR_CONSTANT - || mpz_cmp_ui (stride_expr->value.integer, 0) == 0) + if (!gfc_simplify_expr (stride_expr, 1) + || stride_expr->expr_type != EXPR_CONSTANT + || mpz_cmp_ui (stride_expr->value.integer, 0) == 0) { mpz_clear (stride); return false; diff --git a/gcc/testsuite/gfortran.dg/pr103588.f90 b/gcc/testsuite/gfortran.dg/pr103588.f90 new file mode 100644 index 00000000000..198e1766cd2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr103588.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/103588 - ICE: Simplification error in gfc_ref_dimen_size +! Contributed by G.Steinmetz + +program p + integer, parameter :: a(:) = [1,2] ! { dg-error "cannot be automatic or of deferred shape" } + integer :: b(2) = a(::a(1)) ! { dg-error "Invalid" } +end -- 2.26.2