From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1684955762; x=1685560562; i=anlauf@gmx.de; bh=nxCNM0vwI28FD3xYluQ7a6cvdOCvBPZwh+EV5EL+0ko=; h=X-UI-Sender-Class:From:To:Subject:Date; b=WSfzpitc0n4+2hQuY6SN9SSzq+LjDOGbmnBmyaZFT3XxQLLCKhkCjYjYAs7y3tj62EHo8kr YodnNJIPJ0HDFABHPO6F6KJY1AaQ0gJxZQKdssVHVGgacS2NwZ7GwOU0a5hnd8k5c6xa3qDTt lL3GDjzNHhUqqjOqLcE2Jwm9qQ/o+xbB+ZOBRKOdnukZLzLEzo9i6FKBsIjHeLO5lsCq7edd3 4sI6MWJqtQrqw6ylCLEi9qjmmQjl8td9Olwm71LGCjZvmTJ2i23O8BJDZxSE6oVF07QOCmcJy KupHPRQGP3vwoWfNcO+qGZv0+iDwDaDCoPelmpQs2ymqbx8xHbtA== 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: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] Fortran: reject bad DIM argument of SIZE intrinsic in simplification [PR104350] Content-Type: multipart/mixed; boundary=sgnirk-8fff9cad-21fc-4cfc-9bec-69d88fffb603 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 List-Id: --sgnirk-8fff9cad-21fc-4cfc-9bec-69d88fffb603 Content-Type: text/plain; charset=UTF-8 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 --sgnirk-8fff9cad-21fc-4cfc-9bec-69d88fffb603 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr104350.diff Content-Transfer-Encoding: quoted-printable =46rom 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. =2D-- 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 =2D-- 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 !=3D EXPR_CONSTANT) return NULL; - d =3D mpz_get_ui (dim->value.integer) - 1; + if (array->rank =3D=3D -1) + return NULL; + + d =3D 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/gfor= tran.dg/size_dim_2.f90 new file mode 100644 index 00000000000..27a71d90a47 =2D-- /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 express= ion +! Contributed by G. Steinmetz + +program p + implicit none + integer :: k + integer, parameter :: x(2,3) =3D 42 + integer, parameter :: s(*) =3D [(size(x,dim=3Dk),k=3D1,rank(x))] + integer, parameter :: t(*) =3D [(size(x,dim=3Dk),k=3D1,3)] ! { dg-err= or "out of range" } + integer, parameter :: u(*) =3D [(size(x,dim=3Dk),k=3D0,3)] ! { dg-err= or "out of range" } + integer, parameter :: v =3D product(shape(x)) + integer, parameter :: w =3D product([(size(x,k),k=3D0,3)]) ! { dg-error= "out of range" } + print *, ([(size(x,dim=3Dk),k=3D1,rank(x))]) + print *, [(size(x,dim=3Dk),k=3D1,rank(x))] + print *, [(size(x,dim=3Dk),k=3D0,rank(x))] + print *, product([(size(x,dim=3Dk),k=3D1,rank(x))]) + print *, product([(size(x,dim=3Dk),k=3D0,rank(x))]) +end =2D- 2.35.3 --sgnirk-8fff9cad-21fc-4cfc-9bec-69d88fffb603--