From patchwork Tue Sep 7 21:44:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 1525511 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=W3lWdVN4; dkim-atps=neutral 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+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) 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 4H3zMh6vHzz9t0T for ; Wed, 8 Sep 2021 07:45:19 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id ADB95385C418 for ; Tue, 7 Sep 2021 21:45:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ADB95385C418 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1631051116; bh=XPNhVXQmvs5RmC/l0tjk4pI3em82q2FWctu45lUkY3c=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=W3lWdVN4Db3bNxzhSdXeY8EUn0EMoSkkc1LMk9rHCcLqG8DBLJPIehxxS1qauckWT M1YQf0EC+U1bhwif8nfIfsz4/3DglM8hTdD5TZLJiRb7objR/eW+E9cjV/1KCbenxe z/PU5To1OVgy3Zs3FcN5DLw5zxFyZ4iEjhhvVKEA= 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.15.15]) by sourceware.org (Postfix) with ESMTPS id 40D2A3858023; Tue, 7 Sep 2021 21:44:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 40D2A3858023 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.7.139] ([79.251.7.139]) by web-mail.gmx.net (3c-app-gmx-bs42.server.lan [172.19.170.94]) (via HTTP); Tue, 7 Sep 2021 23:44:38 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/82314 - ICE in gfc_conv_expr_descriptor, at fortran/trans-array.c:6972 Date: Tue, 7 Sep 2021 23:44:38 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:nltpawN9ENCaYlGwS28sV88CwqgrTrydpp7iZjSqf+oLc5r29OhiQmeaIsPNk4vHTFWiB 2y82XjqP06WJhBi/TaOwNNQY2Ov0uDElqw/2CI/7sMQlL3DDxEBF7tAZBAwEXqyaWjGW7Vi/Qizw PRT6j2hC9clofzTzVS7DV0eZQtau5FllDP7Ti0h/f8AQ7Hx0Aav3Z4dJKAzd6o6rFKggFbaVwyiX Mpypf8Rvd8Hm5LkqU75uL6/JmEY/Jp7C9MNQ7E2SzCpPJSDESZ/8gzUuQ8ODMBeAjghX1YIRyokL BI= X-UI-Out-Filterresults: notjunk:1;V03:K0:En6dznQLk80=:MsDPuBDd92BAjFNRW1lhFG RZFjF0w1M7wLrVih9xeFQ9dzDHKPSE1QNsLUYIVSyddL24WatX6OspGFTWokzsTGfEW18Qzt9 3Sexsui9fuy7czSt+my6EGUXCErsheZmYlbf8rAKUcHdeLthAjekOtWpzA7ydES/mLWk6AYnd MM+X3TlfaCTneoJnJu6xf14eCXHgqBwaouyZM+NWKOXeXTil4Teh7vag1tWMCbpz9m4KbDs0y 1U1kOFQsge9iopHmRrrfUdJbZ1x5elqikta0Ju0lSf6Ov3QMDvgmuSgfKlPoXvsB7xWQmuYz3 zs/h84bco1gbZhJixvGt1WzvKCx2/1RDtWSS0n5uLcA+EjusuI7qClk4uXYaPP0vKqCRud0Is YnA0Ay5s6Nz/+lXxl3rfXUYgAHvSDlxnRW27zoblZZ4NAe5fWR7GWpUsHJINtHairRstaxnMT jqSc63W1nGi6JcYkCHondXhDBHCOpNpj10aY4Tldm8g4u4NzZWZLTEARF/JISyZ2BSU5mgo11 c9gWT4k9ijJtrUtLKtAAI2wr6zdBBvaayL1Gsoh08RlifpMjTItXULkmCrpOSAUBbanT0/RcF U5SA838kq12VEuM5I68BSEOeY1Ej9cJ3v1NAN74gMNAdxajA5mGY16I897qXWaKK9XzkpkzR0 jLAqwt0wrKrgEtFcZNZ6tEoltF72HgqED2VUBebttsAV62F502F2uVQG0MiU0rDVnf6rPNgrq eA2i7zqUWhkgrVbVcDTyLsVPAeh8VUPwlwCnu8RHHk+GSeFki+ScZC6ZINB6+UMz9e/g/ZPWG efX0ZLoh3JDUn05ONwYjLt3+iS7dQ== X-Spam-Status: No, score=-11.2 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.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+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" When adding the initializer for an array, we need to make sure that array bounds are properly simplified if that array is a PARAMETER. Otherwise the generated initializer could be wrong and screw up subsequent simplifications, see PR. The minimal solution is to attempt simplification of array bounds before adding the initializer as in the attached patch. (We could place that part in a helper function if this functionality is considered useful elsewhere). Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald Fortran - ensure simplification of bounds of array-valued named constants gcc/fortran/ChangeLog: PR fortran/82314 * decl.c (add_init_expr_to_sym): For proper initialization of array-valued named constants the array bounds need to be simplified before adding the initializer. gcc/testsuite/ChangeLog: PR fortran/82314 * gfortran.dg/pr82314.f90: New test. diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 2e49a673e15..f2e8896b562 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -2169,6 +2169,24 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus) sym->as->type = AS_EXPLICIT; } + /* Ensure that explicit bounds are simplified. */ + if (sym->attr.flavor == FL_PARAMETER && sym->attr.dimension + && sym->as->type == AS_EXPLICIT) + { + for (int dim = 0; dim < sym->as->rank; ++dim) + { + gfc_expr *e; + + e = sym->as->lower[dim]; + if (e->expr_type != EXPR_CONSTANT) + gfc_reduce_init_expr (e); + + e = sym->as->upper[dim]; + if (e->expr_type != EXPR_CONSTANT) + gfc_reduce_init_expr (e); + } + } + /* Need to check if the expression we initialized this to was one of the iso_c_binding named constants. If so, and we're a parameter (constant), let it be iso_c. diff --git a/gcc/testsuite/gfortran.dg/pr82314.f90 b/gcc/testsuite/gfortran.dg/pr82314.f90 new file mode 100644 index 00000000000..3a147e22711 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr82314.f90 @@ -0,0 +1,11 @@ +! { dg-do run } +! PR fortran/82314 - ICE in gfc_conv_expr_descriptor + +program p + implicit none + integer, parameter :: karray(merge(3,7,.true.):merge(3,7,.false.)) = 1 + integer, parameter :: i = size (karray) + integer, parameter :: l = lbound (karray,1) + integer, parameter :: u = ubound (karray,1) + if (l /= 3 .or. u /= 7 .or. i /= 5) stop 1 +end