From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by sourceware.org (Postfix) with ESMTPS id E68473858D1E; Thu, 10 Feb 2022 20:28:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E68473858D1E X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.7.21] ([79.251.7.21]) by web-mail.gmx.net (3c-app-gmx-bs60.server.lan [172.19.170.144]) (via HTTP); Thu, 10 Feb 2022 21:28:40 +0100 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] PR fortran/104211 - ICE in find_array_section, at fortran/expr.cc:1720 Content-Type: multipart/mixed; boundary=refeik-7fbb457f-d82f-466e-8ab2-afc45c6be787 Date: Thu, 10 Feb 2022 21:28:40 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:YTQSz2mxl0BFF5dcmAJTAtcDDhOpQzFBSIdlJr4X4jeAKW0LC5hHAvGGL5pKat7UBoOZt 2OwvzlrOqbz0ZN5scznR1TUEBRkfAgYqbZ5bQvOdYaKqjhymJAoQ39e2OZIZolVMfHQZ2eF1WsZy HGhm9nyAZJKRiLQWsYJZVoY7ykekgr2HrUdBm8VPou7dSOvTjGEL7NtPns15gjyT+7TdAHTv/4+W 92X/zmS89lJdU2oj/oumQCziMCANsSTWCqX082MqSsCd30HXz5ToIcTbck3LZXvOn5jmY6C/tCP8 /Y= X-UI-Out-Filterresults: notjunk:1;V03:K0:qYjFWKjq+8E=:FTYLkFEIZlXctLvBpiwLG1 nkjIVbB8O2orICp9DEWtYafDqTq99drZ0u1eJ8GUWy2V0JqOXdYYnEvJrH8XOr+1Mxg9wkLaY MG8diLRTeusPyk2dX3X5/Xts39PSiSa5ezHpZO9eTFTziN4aGbNGF6HOTcG7JHs06SgPnvv8H oltukpK/VmM+mBkc+gm4H0nHPzf2DsYsnleQcsKtEjm9us7pVAUnExArITAiZYEC8cDpWZJNY 233lWwCT/Tw/jUlsF/h2f9Y//MtmPCrN4uUwUk6iGBnnWLGsLDpBT/nXhIVjmNzNjs+TgAgAE 89daUdJROc8z1fzSywTPZQaG58zogMfUusqo8+3OlKB3wj54sguHfXScyIV4Vn3K+Lr8J1rNV ecRLMT0noGORceKSpLkESRqKqnvYSyB0AYVDGaUD868MvxuY0Cc/23Rb8AJwKN49Oqmrv9/rF VqctJ8RefDBuhO6DnQhqPjxJRZcWPFOOZ9jQ7sabBaEXUCRc6V513J3klcErpVS5HG08qlbuO invL6LMltkZEEDZ0NUT8lZWIvZ957I5S1SlH67IfU3w7OzBGUoscvZ4neMpCRlQq7NCFXlPgI fC7rbpPYiRgW8BNMCCpOgPlHC7FaeOBrLRBNUazD5+fHrEV3BTXNJlYN0g2qegLE7kd1M2Waj WPbxMF7oxfCqStIFJn4ElYIdp/76FxftKjr3Kqn9EpkCXMHk+NZ+emsGF1I46Nai2ebmWPjvO MEPNn8G/Nr9gI8S/2D6Z6HqFn84/+apZecER9FG6LW1SSAhEDRga91KOeSzR3l7NuthBu2hZO VjoWF5Z X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, WEIRD_PORT 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: 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: Thu, 10 Feb 2022 20:28:44 -0000 --refeik-7fbb457f-d82f-466e-8ab2-afc45c6be787 Content-Type: text/plain; charset=UTF-8 Dear Fortranners, when referencing a bad array section after an erroneous previous declaration we might hit an assert. The assert can be replaced by a more gracious error recovery. Reported by Gerhard. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald --refeik-7fbb457f-d82f-466e-8ab2-afc45c6be787 Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-Fortran-improve-error-recovery-on-bad-array-section.patch Content-Transfer-Encoding: quoted-printable =46rom d0250b563eb51f5f5fba5a73a40451cedeb5900d Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Thu, 10 Feb 2022 21:22:48 +0100 Subject: [PATCH] Fortran: improve error recovery on bad array section gcc/fortran/ChangeLog: PR fortran/104211 * expr.cc (find_array_section): Replace assertion by error recovery when encountering bad array constructor. gcc/testsuite/ChangeLog: PR fortran/104211 * gfortran.dg/pr104211.f90: New test. =2D-- gcc/fortran/expr.cc | 8 +++++++- gcc/testsuite/gfortran.dg/pr104211.f90 | 11 +++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pr104211.f90 diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc index ed82a94022f..c9c0ba4cc2e 100644 =2D-- a/gcc/fortran/expr.cc +++ b/gcc/fortran/expr.cc @@ -1718,7 +1718,13 @@ find_array_section (gfc_expr *expr, gfc_ref *ref) } cons =3D gfc_constructor_lookup (base, limit); - gcc_assert (cons); + if (cons =3D=3D NULL) + { + gfc_error ("Error in array constructor referenced at %L", + &ref->u.ar.where); + t =3D false; + goto cleanup; + } gfc_constructor_append_expr (&expr->value.constructor, gfc_copy_expr (cons->expr), NULL); } diff --git a/gcc/testsuite/gfortran.dg/pr104211.f90 b/gcc/testsuite/gfortr= an.dg/pr104211.f90 new file mode 100644 index 00000000000..21b0a26a17f =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr104211.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/104211 - ICE in find_array_section +! Contributed by G.Steinmetz + +program p + type t + real :: n + end type + type(t), parameter :: a(3) =3D [t(2)] ! { dg-error "Different shape" } + type(t), parameter :: b(2) =3D a(2:3) ! { dg-error "Error in array cons= tructor" } +end =2D- 2.34.1 --refeik-7fbb457f-d82f-466e-8ab2-afc45c6be787--