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 413893858D1E; Wed, 17 May 2023 18:52:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 413893858D1E 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=1684349530; i=anlauf@gmx.de; bh=mtpR4gdg7AxaRoDr6/oU828wraAV+MNahPcl/uRFqkI=; h=X-UI-Sender-Class:From:To:Subject:Date; b=AFvsC/XKvjUIbjTmGrWBK/9BRTg6BnZ59pqhcE15B+2Grf5PTG6slvgeGZ89R3Irc YdMSqbkgG/vX/iDrdkICbTeynYW+0Vq2mBQXMfVbHAicFOszg3Cj5252+4eMbZgyyR Fm0V92USlncrGmZZx3ccsXsbXxl9pFSptCApvquBfc89NImy8tDRAU97YUI/5ALxfL f9etbEA2dsQIr7RV/Mr/PIfPoKEwGUtlh6K7coJyjhlCCNqWSjjKVv29hQwozVJDcB CM/BHqy3DBJtOAP2NGUAwNuxEXBUkYE6QMYC6noxNqDhr1JGqWjq/yVDH+qI1kwBGu q6yVi2S+l5BVQ== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [79.251.12.34] ([79.251.12.34]) by web-mail.gmx.net (3c-app-gmx-bap55.server.lan [172.19.172.125]) (via HTTP); Wed, 17 May 2023 20:52:10 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] Fortran: set shape of initializers of zero-sized arrays [PR95374,PR104352] Content-Type: multipart/mixed; boundary=refeik-f096a226-891c-4b1d-bdfb-161e5f2f2f8b Date: Wed, 17 May 2023 20:52:10 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:w9BN7uBciAML9ZXDpVSlitx3dbqySmmYEgutXT8bR9ClZaG3fzdLDaTPcvBad3sPRM2+9 sQ7FkLX6dEzxs2+G0EaqXb8H7aMENv53r6aFXhl9fkoR1MjQgiL/o32G/UYXbz5S9GKpySOc2h7P Is85+1h2g+RA2LIXACrd6R+Y1qYMhpbfCCn8aihne1mh4AJRXZILm+6e049Bm2hIC614ZPg0jrlU 4yRxWsxxp+LzjnWcCmvHPHYDX8Ia+zIOmpuSWThjw3Wb7DWIFmAUa4pxzdqS6HEKvfp1MMoENjZf FE= UI-OutboundReport: notjunk:1;M01:P0:jIimy+wIiJc=;g/kSbT2JaTLPHGoQD0VFIdSsY7I FZ9o9x46StP0gcUV0Qjs0BvIIIN3cvc6+hMZ7PdPSLr7ITt2m9riIaKz6GmA7QUPPHMPypPYP 6Z+7i1DS6ollXZzz+9sBPh/fp6+zrYXc27vf1BJ6V8gpo/qwWZLbE8c35Z54tFSTBRWXnFjC8 76KhoZd6ebHtlmvdFgKsxcbxtqCrJHqzPbty2j4Ze9dwuPjBGqOrvfCkqiM7eCyEaJxxguSZM +97dktoAwApP1t1x4q9YY/Xi2QhZ0DUFyNpk9LAu88C3LSUg+5c2kCP1pdBSINyyh7oSrfHdc eRi58Spobu8nyb3QsEvVj1NpMfdhlaU4j+FsZgqfMsdEZkCftVry6zp62FOOuGRWE+TnadDNH G6qz9sV2vzL7CqFLpuaGJJNgrX6/6Dg7BuiTo3GoK3ukwcbGtDbj7ATKfBs/nQonaFetzINSR L1eoOErstqqTY8W2Cwn3tSLhMxIREsxIxUQOZoDq91WTD+i5aAFByomPIXXqAVBVfZlSy0mma oC3GGMo2NYECLAmH2aEYXxdQZWyT02EsDI41KkDZRYR7JrfBkXACrujKO2vRfDXwiyB78HPD3 ef4x7V6cn9oQtwUiWDUiuKYCxVDiK0S3FEEOS7ZLV6kJd+cng0U21oR88PjNBYpEFwYfhTXcX FUWst6vHlT8zZA+6Px9oFmcoXUXgdtPC5PC/626+4Y18qH+bZLi3Giiq5rFFdFwtj9jeVGEGs KbI92/Rj/PRv1wiHkt/H3HMFHwEJ/SbwmAGC4UKW/6bY6klbcr2AZpETceIaFFv9Ug4YzKEM6 S3SBLg04Vlf2RXJYa+75bBmw== 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,RCVD_IN_MSPIKE_H2,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: --refeik-f096a226-891c-4b1d-bdfb-161e5f2f2f8b Content-Type: text/plain; charset=UTF-8 Dear all, the attached patch is neat, because it fixes a bug by removing code ;-) When generating the initializer for a parameter array, we excepted the case of size 0, which however prevented the detection of array bounds violations and lead to ICEs in various places. The solution which removes the comparison for size > 0 also has the bonus that it fixes a minor memory leak for the size==0 case... Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald --refeik-f096a226-891c-4b1d-bdfb-161e5f2f2f8b Content-Type: text/x-patch Content-Disposition: attachment; filename=pr95374.diff Content-Transfer-Encoding: quoted-printable =46rom 9d2995d2c1cf5708e3297fc7cffb5184d45a65cb Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Wed, 17 May 2023 20:39:18 +0200 Subject: [PATCH] Fortran: set shape of initializers of zero-sized arrays [PR95374,PR104352] gcc/fortran/ChangeLog: PR fortran/95374 PR fortran/104352 * decl.cc (add_init_expr_to_sym): Set shape of initializer also for zero-sized arrays, so that bounds violations can be detected later. gcc/testsuite/ChangeLog: PR fortran/95374 PR fortran/104352 * gfortran.dg/zero_sized_13.f90: New test. =2D-- gcc/fortran/decl.cc | 3 +-- gcc/testsuite/gfortran.dg/zero_sized_13.f90 | 28 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/zero_sized_13.f90 diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc index 9c4b40d4ac4..4c578d01ad4 100644 =2D-- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -2239,8 +2239,7 @@ add_init_expr_to_sym (const char *name, gfc_expr **i= nitp, locus *var_locus) && gfc_is_constant_expr (init) && (init->expr_type =3D=3D EXPR_CONSTANT || init->expr_type =3D=3D EXPR_STRUCTURE) - && spec_size (sym->as, &size) - && mpz_cmp_si (size, 0) > 0) + && spec_size (sym->as, &size)) { array =3D gfc_get_array_expr (init->ts.type, init->ts.kind, &init->where); diff --git a/gcc/testsuite/gfortran.dg/zero_sized_13.f90 b/gcc/testsuite/g= fortran.dg/zero_sized_13.f90 new file mode 100644 index 00000000000..4035d458b32 =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/zero_sized_13.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! { dg-options "-w" } +! +! PR fortran/95374 +! PR fortran/104352 - Various ICEs for bounds violation with zero-sized a= rrays +! +! Contributed by G. Steinmetz + +program p + implicit none + integer :: i + integer, parameter :: a(0) =3D 0 + integer, parameter :: b(0:-5) =3D 0 + integer, parameter :: c(*) =3D [(a(i:i), i=3D0,0)] ! { dg-error "out of= bounds" } + integer, parameter :: d(*) =3D [(b(i:i), i=3D1,1)] ! { dg-error "out of= bounds" } + integer, parameter :: e(1) =3D [(a(i) , i=3D1,1)] ! { dg-error "out of= bounds" } + integer, parameter :: f(1) =3D [(a(i:i), i=3D1,1)] ! { dg-error "out of= bounds" } + integer :: g(1) =3D [(a(i:i), i=3D0,0)] ! { dg-error "out of= bounds" } + integer :: h(1) =3D [(a(i:i), i=3D1,1)] ! { dg-error "out of= bounds" } + print *, [(a(i:i), i=3D0,0)] ! { dg-error "out of bounds" } + print *, [(a(i:i), i=3D1,1)] ! { dg-error "out of bounds" } + print *, any (a(1:1) =3D=3D 1) ! { dg-error "out of bounds" } + print *, all (a(0:0) =3D=3D 1) ! { dg-error "out of bounds" } + print *, sum (a(1:1)) ! { dg-error "out of bounds" } + print *, iall (a(0:0)) ! { dg-error "out of bounds" } + print *, minloc (a(0:0),1) ! { dg-error "out of bounds" } + print *, dot_product(a(1:1),a(1:1)) ! { dg-error "out of bounds" } +end =2D- 2.35.3 --refeik-f096a226-891c-4b1d-bdfb-161e5f2f2f8b--