From patchwork Sun May 19 08:04:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 1936765 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=T2bw9bg9; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VhtX52W0Jz1ynR for ; Sun, 19 May 2024 18:04:37 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 61C663858C62 for ; Sun, 19 May 2024 08:04:34 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by sourceware.org (Postfix) with ESMTPS id 282523858D20 for ; Sun, 19 May 2024 08:04:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 282523858D20 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=baylibre.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 282523858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::52f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1716105849; cv=none; b=TeJYcrBGZhh3KbBorUF2ev5d99Hw8F/tTClINIZ9UOX+QYxCN9TcEEt9aCm+IYwzT0T4n1WK8Ax0yY/Tiq03AssVQlTzkubQTPnqfyVQ/fXZoiEMdjs2ZlV1a0+rtiem4MtdNZj5gFtH80PXxo1UeUxQUTWFdy52MPHtgw5YXYg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1716105849; c=relaxed/simple; bh=owLKB0RAud8/FGJKDEid6s64hBks27gQFsZg2x/2I4s=; h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject; b=ByidpmP1ONkKbh3VWbjjw/g+ZGMpZUWgSNZ+3cjRrLEaNFzTje8uoQiu0w9ElsiQwOa7jDS51WlOKPS8oNRDpX8r0bg429HX99Eu+WDiB3h9FTA2JHzLhXaFLFnZ8556cX8u6N6WFKL+7PLnwGpikyWEpjq6IruKPh0AvtxT8V8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-5727dc6d3edso6519274a12.0 for ; Sun, 19 May 2024 01:04:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1716105845; x=1716710645; darn=gcc.gnu.org; h=cc:subject:from:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=ai+WOQHyUkMyfOar1dZKogkp7nMpjhHGjTDzCzf8dIo=; b=T2bw9bg9+yR2rc3vDBD51H+04dC3bjdb1KjlTGGOc4Uwk5PYLHu5gGMIS0eMFPbe0y 46R3l+3bsC039+d1EKFHt1K0YuMvxO96ol5qWYaKeekRuU1fwEfeYYJA0YpTiRrG0Xjo LQwmmhggjmDpjdm6qY8j02qTuhTcnP7PBM6hudmQ/zSVV31Sr0nSFsD6RpRuQuTnXTAp tcrJ9Tv4omR7+JXM0LKRhpxZrAs2WJb6D+BBmJ6QUCO77nkTcLdXfvSqltpw7YVlhMeh QA3rLmFF3FKgiWHob6VBcXWLUJsxD1ABxnvTKgjMp3b+sMuRVxP/vUTbdtf8H2t4aB7c ht9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1716105845; x=1716710645; h=cc:subject:from:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ai+WOQHyUkMyfOar1dZKogkp7nMpjhHGjTDzCzf8dIo=; b=FqzQ8BqGx/Z2rmATZEmxwX3er1l+OGkFAzzwUHiJ8FCkJiDp6wDRREbe4KUwxF4qtt vEKppqK0r0GnMbSz7KmNPOz0iGAmDBtfflU39XKs3O3lHXcTGKsYUr9VDyXKOa94I/NV UDd5RSxlhtF5eKoqFBqb0SSUSfodT/jaij4elCMT7eHTS9SP9xxi3dXgsSI/qM6sK/iQ VS0fsBXKwgxYyby+NWt3vRrs9IFZ1UsW4CbVyXfbcUj+PvlzfxOf7uPwArGrzihdOl80 +M05w2ppRLcW9WoCs/uRdcm3EzIdMPPx83o0UxO/zAY8Fd7Btsbr71NTvTJ0XbcqNz1s c7aQ== X-Gm-Message-State: AOJu0YwYfnp4bVfNZIVZpIjEKH3Kzvgg675yI1PfI4Zb31pmSBN6uJCQ sVB9UYw7S30cjP+nH+jaz9vYbETGZLp9CcL436ZywzPI9nZF/ea7wUeUTq3BfDliSEHGma1VOkr B X-Google-Smtp-Source: AGHT+IFoFbVTCcygu/GPetRvbuI0wM4idtPNwteG8zYVSUSNkgWRWTpZEXkQPTa5qGDRxMip7jlEbQ== X-Received: by 2002:a17:906:1159:b0:a59:ce25:9b88 with SMTP id a640c23a62f3a-a5a2d65ece9mr1639102166b.54.1716105844632; Sun, 19 May 2024 01:04:04 -0700 (PDT) Received: from [192.168.8.102] (tmo-084-130.customers.d1-online.com. [80.187.84.130]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a5cddf22866sm470647766b.12.2024.05.19.01.04.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 19 May 2024 01:04:04 -0700 (PDT) Message-ID: Date: Sun, 19 May 2024 10:04:02 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: gcc-patches , "fortran@gcc.gnu.org" From: Tobias Burnus Subject: [Patch] Fortran: Fix SHAPE for zero-size arrays Cc: Sandra Loosemore X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org That is for https://gcc.gnu.org/PR115150 – a GCC 12/13/14/15 regression, caused when switching from a libgomp call to inline code and missing the corner case of zero-size arrays ... OK for mainline + all affected branches? Tobias Fortran: Fix SHAPE for zero-size arrays PR fortran/115150 gcc/fortran/ChangeLog: * trans-intrinsic.cc (gfc_conv_intrinsic_bound): Fix SHAPE for zero-size arrays gcc/testsuite/ChangeLog: * gfortran.dg/shape_12.f90: New test. gcc/fortran/trans-intrinsic.cc | 4 ++- gcc/testsuite/gfortran.dg/shape_12.f90 | 51 ++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc index 80dc3426ab0..912c1000e18 100644 --- a/gcc/fortran/trans-intrinsic.cc +++ b/gcc/fortran/trans-intrinsic.cc @@ -3090,7 +3090,9 @@ gfc_conv_intrinsic_bound (gfc_se * se, gfc_expr * expr, enum gfc_isym_id op) lbound, gfc_index_one_node); } else if (op == GFC_ISYM_SHAPE) - se->expr = size; + se->expr = fold_build2_loc (input_location, MAX_EXPR, + gfc_array_index_type, size, + gfc_index_zero_node); else gcc_unreachable (); diff --git a/gcc/testsuite/gfortran.dg/shape_12.f90 b/gcc/testsuite/gfortran.dg/shape_12.f90 new file mode 100644 index 00000000000..e672e1ff9f9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/shape_12.f90 @@ -0,0 +1,51 @@ +! { dg-do run } +! +! PR fortran/115150 +! +! Check that SHAPE handles zero-sized arrays correctly +! +implicit none +call one +call two + +contains + +subroutine one + real,allocatable :: A(:),B(:,:) + allocate(a(3:0), b(5:1, 2:5)) + + if (any (shape(a) /= [0])) stop 1 + if (any (shape(b) /= [0, 4])) stop 2 + if (size(a) /= 0) stop 3 + if (size(b) /= 0) stop 4 + if (any (lbound(a) /= [1])) stop 5 + if (any (lbound(b) /= [1, 2])) stop 6 + if (any (ubound(a) /= [0])) stop 5 + if (any (ubound(b) /= [0,5])) stop 6 +end + +subroutine two +integer :: x1(10), x2(10,10) +call f(x1, x2, -3) +end + +subroutine f(y1, y2, n) + integer, value :: n + integer :: y1(1:n) + integer :: y2(1:n,4,2:*) + call g(y1, y2) +end + +subroutine g(z1, z2) + integer :: z1(..), z2(..) + + if (any (shape(z1) /= [0])) stop 1 + if (any (shape(z2) /= [0, 4, -1])) stop 2 + if (size(z1) /= 0) stop 3 + if (size(z2) /= 0) stop 4 + if (any (lbound(z1) /= [1])) stop 5 + if (any (lbound(z2) /= [1, 1, 1])) stop 6 + if (any (ubound(z1) /= [0])) stop 5 + if (any (ubound(z2) /= [0, 4, -1])) stop 6 +end +end