From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by sourceware.org (Postfix) with ESMTPS id 4B5CB3858431; Mon, 30 Aug 2021 21:40:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4B5CB3858431 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.86.115] ([93.207.86.115]) by web-mail.gmx.net (3c-app-gmx-bs11.server.lan [172.19.170.62]) (via HTTP); Mon, 30 Aug 2021 23:40:21 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] PR fortran/101327 - ICE in find_array_element, at fortran/expr.c:1355 Content-Type: multipart/mixed; boundary=rehcsed-6f0bbd40-1443-4733-9b7d-7fba3e3c8ed7 Date: Mon, 30 Aug 2021 23:40:21 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:iq4XHO1gepn/KK0924xsQxzKL1oxCeQyXDFEdpl28+2mEf8YeklKKOBPBbP5Ar2yAV1NI CmuCa5VAdjpxDQV7bRPX+oSrTC/hsYKH3eWDWEkdO2zKHj9qltomBfCEyqOvhyzGFIDP95MOtI/0 axBiTZg2Rc3rrhxQlGejGoor6ryBGGroBQysxzIcEU8bHbgLePF9/lq38c61Y31U3BUT0E/gcdK7 kPT88oKHgzE2swnoaQAf8bHXkgXg8gGvoG0Olnwdu/QXjqRx61khkW8I0ETkOweEwHcIhSvB8TTb bg= X-UI-Out-Filterresults: notjunk:1;V03:K0:bldTKxg5kpY=:NOjQKwPSA6u3h7D+FRvZpR qyU6EkUoVuS6JOdE6+2BqN+FZ/dErUHRjhLsFcnZMoBFnWx9kagVsCjgbgS+3zDQLNP2NgqDE BtxtUDNBZ64GW8ybAGQXTByGG8r3TPVOf/32Hht/elMLya457CEjMpPxbEuR5XJiXgJSNZXd3 I3yFu2BuSn21T3ltL1y2i2BnBm5C8AfOeqN31XZ9RT+r3FNieWm4QhLEmrt4Dhzu3t/9q+jht 5XMDZd7tOaTi3GcwAj3wXR8/hmHbfxUInE4cd5c2pz8b1uXwh84a1FqZWXOW7dgw85r2U+hdD 62VdVL5GW4tqF0m5AXUodwCDVWoeBxPLiDcjWdPBgevkxE7YZXqo+Y30PeS845L5WH1nsQDHN PjoXUSngRPTDk14OV/L5von/foHUzn20Ss4rakUIHGadIjulHrRszW+PnMfpaokB480w6IOuE f2tQBNrj24qMKXQXdiGxG0Jsgmqwc4lMOroVA8xc8HUHKKTQuq7cLTgHRt5sUv7RAtAit8sc8 J5B0wLpsrohBHaX2f6/UYhWWNcomOYbqsHKnAsGHjHDXao7gfM3Y/zHX8cS6D21CrBD0Y6+f8 00vBlI/JN8nwEkhm9zCsnfCbHNjqT7DPnzlFHwDkSdlC/CsiEs4PEbk3BW5HcrF8LjwQvb8gL gMopGoG6CILkXoXAFcPOgnYaQQXEbu/8S4ikHoIN/jUmu1Pa090FyFtHOufo8LvRCya/ArhHW pk7mAtnrggHppRRwVJsJZcoE0ALIFVKyMA6glXpwxXm7GUBt1eP6ybeWMlha4MQ0Oc4ZHzBpn XdmqdVdSCxMkSH+QOOXlO4vUlkOJg== X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_LOW, 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-List-Received-Date: Mon, 30 Aug 2021 21:40:25 -0000 --rehcsed-6f0bbd40-1443-4733-9b7d-7fba3e3c8ed7 Content-Type: text/plain; charset=UTF-8 There was an issue when trying to use an element from an array constructor which was a broken in a way probably only Gerhard could conceive. We hit an assert that can be replaced by more robust code. Patch is basically Steve's. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald Fortran - improve error recovery determining array element from constructor gcc/fortran/ChangeLog: PR fortran/101327 * expr.c (find_array_element): When bounds cannot be determined as constant, return error instead of aborting. gcc/testsuite/ChangeLog: PR fortran/101327 * gfortran.dg/pr101327.f90: New test. --rehcsed-6f0bbd40-1443-4733-9b7d-7fba3e3c8ed7 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr101327.patch Content-Transfer-Encoding: quoted-printable diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 35563a78697..dfecc3012e1 100644 =2D-- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -1337,7 +1337,9 @@ find_array_element (gfc_constructor_base base, gfc_a= rray_ref *ar, for (i =3D 0; i < ar->dimen; i++) { if (!gfc_reduce_init_expr (ar->as->lower[i]) - || !gfc_reduce_init_expr (ar->as->upper[i])) + || !gfc_reduce_init_expr (ar->as->upper[i]) + || ar->as->upper[i]->expr_type !=3D EXPR_CONSTANT + || ar->as->lower[i]->expr_type !=3D EXPR_CONSTANT) { t =3D false; cons =3D NULL; @@ -1351,9 +1353,6 @@ find_array_element (gfc_constructor_base base, gfc_a= rray_ref *ar, goto depart; } - gcc_assert (ar->as->upper[i]->expr_type =3D=3D EXPR_CONSTANT - && ar->as->lower[i]->expr_type =3D=3D EXPR_CONSTANT); - /* Check the bounds. */ if ((ar->as->upper[i] && mpz_cmp (e->value.integer, diff --git a/gcc/testsuite/gfortran.dg/pr101327.f90 b/gcc/testsuite/gfortr= an.dg/pr101327.f90 new file mode 100644 index 00000000000..f4377aabe7a =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr101327.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/101327 - ICE in find_array_element, at fortran/expr.c:1355 + +subroutine s + integer, parameter :: n([2]) =3D [1, 2] ! { dg-error "must be scalar" } + type t + integer :: a(n(1):n(2)) + end type +end + +! { dg-error "cannot be automatic or of deferred shape" " " { target *-*-= * } 5 } --rehcsed-6f0bbd40-1443-4733-9b7d-7fba3e3c8ed7--