From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 884673858C2D for ; Fri, 25 Mar 2022 11:34:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 884673858C2D Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-86-Q758_nfFMrS7ryzMOKb4mQ-1; Fri, 25 Mar 2022 07:34:30 -0400 X-MC-Unique: Q758_nfFMrS7ryzMOKb4mQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2169380159B; Fri, 25 Mar 2022 11:34:30 +0000 (UTC) Received: from tucnak.zalov.cz (unknown [10.39.192.15]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A7BF940CF8EC; Fri, 25 Mar 2022 11:34:29 +0000 (UTC) Received: from tucnak.zalov.cz (localhost [127.0.0.1]) by tucnak.zalov.cz (8.16.1/8.16.1) with ESMTPS id 22PBYRpw1793431 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 25 Mar 2022 12:34:27 +0100 Received: (from jakub@localhost) by tucnak.zalov.cz (8.16.1/8.16.1/Submit) id 22PBYPKT1793430; Fri, 25 Mar 2022 12:34:25 +0100 Date: Fri, 25 Mar 2022 12:34:25 +0100 From: Jakub Jelinek To: Richard Biener Cc: Tobias Burnus , "fortran@gcc.gnu.org" , GCC Patches Subject: Re: [PATCH] fortran: Fix up initializers of param(0) PARAMETERs [PR103691] Message-ID: Reply-To: Jakub Jelinek References: MIME-Version: 1.0 In-Reply-To: X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.0 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE 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: Fri, 25 Mar 2022 11:34:38 -0000 On Fri, Mar 25, 2022 at 12:16:40PM +0100, Richard Biener wrote: > On Fri, Mar 25, 2022 at 11:13 AM Tobias Burnus wrote: > > > > On 25.03.22 09:57, Jakub Jelinek via Fortran wrote: > > > On the gfortran.dg/pr103691.f90 testcase the Fortran ICE emits > > > static real(kind=4) a[0] = {[0 ... -1]=2.0e+0}; > > > That is an invalid RANGE_EXPR where the maximum is smaller than the minimum. > > > > > > The following patch fixes that. If TYPE_MAX_VALUE is smaller than > > > TYPE_MIN_VALUE, the array is empty and so doesn't need any initializer, > > > if the two are equal, we don't need to bother with a RANGE_EXPR and > > > can just use that INTEGER_CST as the index and finally for the 2+ values > > > in the range it uses a RANGE_EXPR as before. > > > > > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > > > LGTM – thanks for taking care of Fortran patches and regressions. > > > > > 2022-03-25 Jakub Jelinek > > > > > > PR fortran/103691 > > > * trans-array.cc (gfc_conv_array_initializer): If TYPE_MAX_VALUE is > > > smaller than TYPE_MIN_VALUE (i.e. empty array), throw the initializer > > > on the floor, if TYPE_MIN_VALUE is equal to TYPE_MAX_VALUE, use just > > > the TYPE_MIN_VALUE as index instead of RANGE_EXPR. > > > > I am not sure whether "throw the initializer on the floor" is the best wording > > for a changelog. I think I prefer a wording like "ignore the initializer" or > > another less idiomatic expression. And I think a ';' before the second 'if' > > also increases readability. > > Can there be side-effects in those initializer elements in Fortran? For PARAMETERs certainly not, those need to be constant. Even otherwise, this is in a routine that does /* Create a constructor from the list of elements. */ tmp = build_constructor (type, v); TREE_CONSTANT (tmp) = 1; return tmp; at the end so I wouldn't expect side-effects anywhere. Also, I think typically in the Fortran FE side-effects would go into se.pre and se.post sequences, not into se.expr, and this routine doesn't emit those se.pre/se.post sequences anywhere, so presumably it assumes they don't exist. What is the behavior with a RANGE_EXPR when one has { [0..10] = ++i; }, is that applying the side-effects 11 times or once ? Jakub