From patchwork Wed May 17 18:52:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 1782920 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=PsIRYZLN; 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 4QM2Kb54cyz20KF for ; Thu, 18 May 2023 04:52:35 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8F5A33858C2F for ; Wed, 17 May 2023 18:52:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8F5A33858C2F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1684349553; bh=NM8rYzh37XSjlbqkUzkFupoTKM/Iew2htDoNhDzzVRg=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=PsIRYZLNRBqseu1ACn4Wd6rdVO4bt1CKFrysmZ6J8A7hdV5dE76z0uqAnE4gD5yYL IekUAHMHzD2Vxgvcc7JNss5guS5NFC58Mlk/KdIIuuPyZ/8kkdCe99jpBXrJaY1N/n NGbbDZguSeRj3mGOOOYiZsaIcYbPGW/JYg3CQZyk= 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 413893858D1E; Wed, 17 May 2023 18:52:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 413893858D1E 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: To: fortran , gcc-patches Subject: [PATCH] Fortran: set shape of initializers of zero-sized arrays [PR95374,PR104352] 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 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 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 From 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. --- 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 --- a/gcc/fortran/decl.cc +++ b/gcc/fortran/decl.cc @@ -2239,8 +2239,7 @@ add_init_expr_to_sym (const char *name, gfc_expr **initp, locus *var_locus) && gfc_is_constant_expr (init) && (init->expr_type == EXPR_CONSTANT || init->expr_type == EXPR_STRUCTURE) - && spec_size (sym->as, &size) - && mpz_cmp_si (size, 0) > 0) + && spec_size (sym->as, &size)) { array = 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/gfortran.dg/zero_sized_13.f90 new file mode 100644 index 00000000000..4035d458b32 --- /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 arrays +! +! Contributed by G. Steinmetz + +program p + implicit none + integer :: i + integer, parameter :: a(0) = 0 + integer, parameter :: b(0:-5) = 0 + integer, parameter :: c(*) = [(a(i:i), i=0,0)] ! { dg-error "out of bounds" } + integer, parameter :: d(*) = [(b(i:i), i=1,1)] ! { dg-error "out of bounds" } + integer, parameter :: e(1) = [(a(i) , i=1,1)] ! { dg-error "out of bounds" } + integer, parameter :: f(1) = [(a(i:i), i=1,1)] ! { dg-error "out of bounds" } + integer :: g(1) = [(a(i:i), i=0,0)] ! { dg-error "out of bounds" } + integer :: h(1) = [(a(i:i), i=1,1)] ! { dg-error "out of bounds" } + print *, [(a(i:i), i=0,0)] ! { dg-error "out of bounds" } + print *, [(a(i:i), i=1,1)] ! { dg-error "out of bounds" } + print *, any (a(1:1) == 1) ! { dg-error "out of bounds" } + print *, all (a(0:0) == 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 -- 2.35.3