From patchwork Wed May 24 19:16:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 1785820 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.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=) Authentication-Results: legolas.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=B2XTiXBI; dkim-atps=neutral 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 ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QRLWw3XtGz20Q6 for ; Thu, 25 May 2023 05:16:28 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 754DD385841C for ; Wed, 24 May 2023 19:16:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 754DD385841C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1684955786; bh=/q+UwiIMv6Co3+39Os08TH6Bz6cMF7rLBmRoptRvMpo=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=B2XTiXBIxMhbicZkGhzITjR5gkaY9eIiXTYW37giW2BPyC6wYgGCW1zMZtyAcAhz0 kFaQNXBhRVPgYg4a151+i53oSIVpXfARHqrNksMK9/2ks2ADKWQEl8pVn8yaa1s273 XiW/n8alpm3KL1wpXKNM5ORYQotXQ0Gs6PjvIEug= 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 E985C3858D28; Wed, 24 May 2023 19:16:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E985C3858D28 X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [79.232.146.251] ([79.232.146.251]) by web-mail.gmx.net (3c-app-gmx-bap32.server.lan [172.19.172.102]) (via HTTP); Wed, 24 May 2023 21:16:02 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] Fortran: reject bad DIM argument of SIZE intrinsic in simplification [PR104350] Date: Wed, 24 May 2023 21:16:02 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:3sQyavSKNHVdm0JEdRI2TjTukbKThWLklCoIfcLseIuIU2/Kjijo3NwKJUmv+6C0Gd2lh pYRWA22uQyX8TPwybN2a2EpFiIefxeCH+qzhHbKnTXFM2We3h6z4WQKX03dMfqPCkgb/JZHwBnuy rOQmIQTy/oDn80TXgAkLGcuetMfiq1OddRW1CRK0MU4r+xe59stDSHRwHk1QXu8wBssEBzSxz81H uk4YxQODZ2+i8mDLYgWK/CCfVZKgp0uR0D9qco5HE8GFjZTZafl8obRgI4LHch2GmMu+d7l+OihN bQ= UI-OutboundReport: notjunk:1;M01:P0:pWrt8NOZgA8=;pJtpyxG5aj2NZm5uhIxYdSSJ/bn 6cFJh95kCWKPLziR14cbYj3p5I/gZjBcYO41WFpvychgTW5i3MHpOytM8RiNGUHuOf6QETmFU 5mcSImUx/tmF1vOsUvpkKa0iQNI32mPIP8n5Dy98n1IrtumXGJxMqdbYzdTT4q+PdbONIUp7b qcJsh8G8oTZn2j5oqcYaXeQbidjlKd9mhUQX4iW7U9jDLOp7Irq6Q8FtIAKe7aAAJX7nacT9C RYG7IVIrjPJHgp/KV5L+t44x5Lbi3iVDfDj9WEWV/MRZUIKavWN4Hg+bgR4PTnYr/oMguIBYQ RtMjNvMsDrWIltzlBrAP3caHMDgCVewGi7RE4LiChveZIsSMzsxfRb4FsD0uX9h7zInt4PiPw wmbN5q401PgR2z+7k94N3o4V7Zp4Jhu7mAzu0CuJsIef5THdvO/eZCv7Ltbnku7FD9S7CKTs+ ECSJdIELYa+NnyZUAzn7ddhJSJtGf9y9Z/k2fOwKObPRTFPAkpb2Ms8GW9iTmxhjxUKY728qj iHmfG0mfJxxe2pQfH4hiBkE0Gp/KZ1csMGcm7DIPj7oJJYzwqCAo+67x+NZyH00Ck8IKYIdWb ShiLGF2i7/rdmcR4xmZiREqGtc+PvvH/KOUAP00UU6p554LbsrMTTSWA00lR6GwFsSy5M4bE6 4j9NeMoYYY382VIQikIbKkj3aBqpFxq2rh3jhrs4gXBhZj6i0grktJc1CdKT1b1IzMDqDx4ul GUDZZnFpZyetedI+kePUDa1W69qgytbYewTiXaaph+G2QEG0SaNGDS7hYvw4+2pMGjCt9Q3PD KDbo0Ve2rUQHjO02dNhDgAUwlYP+x+kWqsdIFt+X0g8lY= X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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" Dear all, the attached almost obvious patch fixes an ICE on invalid that may occur when we attempt to simplify an initialization expression with SIZE for an out-of-range DIM argument. Returning gfc_bad_expr allows for a more graceful error recovery. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald From 738bdcce46bd760fcafd1eb56700c8824621266f Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Wed, 24 May 2023 21:04:43 +0200 Subject: [PATCH] Fortran: reject bad DIM argument of SIZE intrinsic in simplification [PR104350] gcc/fortran/ChangeLog: PR fortran/104350 * simplify.cc (simplify_size): Reject DIM argument of intrinsic SIZE with error when out of valid range. gcc/testsuite/ChangeLog: PR fortran/104350 * gfortran.dg/size_dim_2.f90: New test. --- gcc/fortran/simplify.cc | 12 +++++++++++- gcc/testsuite/gfortran.dg/size_dim_2.f90 | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/size_dim_2.f90 diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc index 3f77203e62e..81680117f70 100644 --- a/gcc/fortran/simplify.cc +++ b/gcc/fortran/simplify.cc @@ -7594,7 +7594,17 @@ simplify_size (gfc_expr *array, gfc_expr *dim, int k) if (dim->expr_type != EXPR_CONSTANT) return NULL; - d = mpz_get_ui (dim->value.integer) - 1; + if (array->rank == -1) + return NULL; + + d = mpz_get_si (dim->value.integer) - 1; + if (d < 0 || d > array->rank - 1) + { + gfc_error ("DIM argument (%d) to intrinsic SIZE at %L out of range " + "(1:%d)", d+1, &array->where, array->rank); + return &gfc_bad_expr; + } + if (!gfc_array_dimen_size (array, d, &size)) return NULL; } diff --git a/gcc/testsuite/gfortran.dg/size_dim_2.f90 b/gcc/testsuite/gfortran.dg/size_dim_2.f90 new file mode 100644 index 00000000000..27a71d90a47 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/size_dim_2.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! PR fortran/104350 - ICE with SIZE and bad DIM in initialization expression +! Contributed by G. Steinmetz + +program p + implicit none + integer :: k + integer, parameter :: x(2,3) = 42 + integer, parameter :: s(*) = [(size(x,dim=k),k=1,rank(x))] + integer, parameter :: t(*) = [(size(x,dim=k),k=1,3)] ! { dg-error "out of range" } + integer, parameter :: u(*) = [(size(x,dim=k),k=0,3)] ! { dg-error "out of range" } + integer, parameter :: v = product(shape(x)) + integer, parameter :: w = product([(size(x,k),k=0,3)]) ! { dg-error "out of range" } + print *, ([(size(x,dim=k),k=1,rank(x))]) + print *, [(size(x,dim=k),k=1,rank(x))] + print *, [(size(x,dim=k),k=0,rank(x))] + print *, product([(size(x,dim=k),k=1,rank(x))]) + print *, product([(size(x,dim=k),k=0,rank(x))]) +end -- 2.35.3