From patchwork Tue May 30 07:21:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Marc_Poulhi=C3=A8s?= X-Patchwork-Id: 100592 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:994d:0:b0:3d9:f83d:47d9 with SMTP id k13csp1996622vqr; Tue, 30 May 2023 00:26:48 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7SquwwkXl9FbEb9+M+LvuvCUoTYf8j6LjOpLNyPOVcfCdiqrz5qUNp41BJ/SAe4Db6CP7u X-Received: by 2002:a17:907:6e18:b0:94f:6627:22b5 with SMTP id sd24-20020a1709076e1800b0094f662722b5mr1645939ejc.47.1685431607861; Tue, 30 May 2023 00:26:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685431607; cv=none; d=google.com; s=arc-20160816; b=hEIM5TKlZaECLddIQq2323B5hpG2UQPT3Z/bPBfLec0ajk4rS0orn8GTXGqT99UKQE ThcfaiVsyzuyez2IMTaxSGL4pHg8aj5DNqdJx9dpUkaMGrUR5N0P5LvzgbMO7KMP6GzD tFWhKOyem7aUdA79ghwC4AJkLaJuIPu/Iq3SK0sHDT+iQnaRl4cXQc78u0ecp9jClH4q Pw3u/aPaczdUqquzVoSjMEHxDqPsa6zNRX/dOk9tOs6aYLv9HX8zQJwoYyq1t9VK8Qit iaJ1hMRGsF80FgE1OP+xvNLHcPuUfdoaQtGg1v/j6/lvReMqVjG7MxQ4pCEFarYXAaAi SV5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:cc :to:dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=2JlwOFMpP5REhdooUbHV4O0od3gmyiE8R8q9BkvOo+Y=; b=A3TIm8X3eADvLx+SoqKPs8kKDLGJUD2u/g5pwA61ufDxScXhClg7XhhWlyTB2gc64v J/qJP7LJzvJQLkPoq/OQ2DHut0oMqZ1HsUd+Zj2c3D0tHUNdAW/OpcLs8NXy4dFuwm5e ZOEGgu1BiQu23itGZI00nAl3FUp7Isb36Abe5bbwZbSZadwUP5l8til3noiSeAONkLV0 xyw6luhhCqtOzD83SZqfhlBIbLRfHPW0eiBWbQD7Mz116iHOWhBg2PfrBYzaKU6feAfZ gtLV5aRbtKYumE3Hem3W18J6w80pga8kN8IMj+9f313L5TKILbLhbXiq+Pp6OKQKAtTf ZP2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=nAmdhLqo; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id u14-20020a170906b10e00b00965cb24ad87si2192908ejy.826.2023.05.30.00.26.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 00:26:47 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=nAmdhLqo; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 727903835339 for ; Tue, 30 May 2023 07:23:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 727903835339 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1685431411; bh=2JlwOFMpP5REhdooUbHV4O0od3gmyiE8R8q9BkvOo+Y=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=nAmdhLqoKkbPGhr9HkbKm2E+5DV+B5iGIhsKsoRTHJFLObSNkmj48Hzf+NHidFCJb 9C+jLFIoX/N/Vviyn6tYx9MzV45Z7b32wwL1YqcyI07I6SgPNh5Q+UleU/RMGC24L6 lyG+/5HxwgBR8zFtU8fvOcbubANWmm0CGvxJsXjM= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by sourceware.org (Postfix) with ESMTPS id 3EA54385B513 for ; Tue, 30 May 2023 07:21:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3EA54385B513 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-3f603ff9c02so27492535e9.2 for ; Tue, 30 May 2023 00:21:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685431267; x=1688023267; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=2JlwOFMpP5REhdooUbHV4O0od3gmyiE8R8q9BkvOo+Y=; b=fcfzars2TCQph2aHtlej/qR/YBRLm1SRZpi7xpVw/BOdjeWOp7IpJ7c97YUcvew0i4 /ojox45GKgGi7TdSv0qRFqrW5YvVU65Bddbv40XVb0e7hHU2/29C90H6kI94NgPp4mg9 sNYOXEN3HSJK+gVihOAjXdindOPQOuDUMSmfUOimTE+21aiNat8/Ho/Gln+BFud+1Tg6 KijJAlrjxnp37DUijgZyDicg2EZd/wGrI/wEHhzhFHya5JvTWEGQjxe4oGY+WyXNAz63 Lo+sO00QAuv2CkuMHGkJQh+9ZsNbR63Q1d8p2ivaNFdzrfKPQlIAwF1OB/duOwTQ3GSA 72Ng== X-Gm-Message-State: AC+VfDxXbqbPIKS3kR7AvapVk6j5c6MRhKcTR/NnHFQgLQK9TWTLAP8R k5EyFCMQHmIjuai4LTvgVkzlIu58qNfXJ6aHYswmmQ== X-Received: by 2002:a05:6000:10c8:b0:309:32d1:59d8 with SMTP id b8-20020a05600010c800b0030932d159d8mr810635wrx.64.1685431267185; Tue, 30 May 2023 00:21:07 -0700 (PDT) Received: from localhost.localdomain ([2001:861:3382:1a90:7733:a608:a415:6b2a]) by smtp.gmail.com with ESMTPSA id n16-20020a5d4850000000b0030632833e74sm2279127wrs.11.2023.05.30.00.21.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 May 2023 00:21:06 -0700 (PDT) To: gcc-patches@gcc.gnu.org Cc: =?utf-8?q?Marc_Poulhi=C3=A8s?= Subject: [COMMITTED] ada: Fix storage model handling for dereference as lvalue and renamings Date: Tue, 30 May 2023 09:21:05 +0200 Message-Id: <20230530072105.2500303-1-poulhies@adacore.com> X-Mailer: git-send-email 2.40.0 MIME-Version: 1.0 X-Spam-Status: No, score=-13.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, 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: =?utf-8?q?Marc_Poulhi=C3=A8s_via_Gcc-patches?= From: =?utf-8?q?Marc_Poulhi=C3=A8s?= Reply-To: =?utf-8?q?Marc_Poulhi=C3=A8s?= Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1767303133743944612?= X-GMAIL-MSGID: =?utf-8?q?1767303133743944612?= Don't require storage access for explicit dereferences used as lvalue (e.g. Some_Access.all'Address) or for renamings. gcc/ada/ * gcc-interface/trans.cc (get_storage_model_access): Don't require storage model access for dereference used as lvalue or renamings. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/gcc-interface/trans.cc | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc index 13f438c424b..f4a5db002f4 100644 --- a/gcc/ada/gcc-interface/trans.cc +++ b/gcc/ada/gcc-interface/trans.cc @@ -4398,14 +4398,32 @@ static void get_storage_model_access (Node_Id gnat_node, Entity_Id *gnat_smo) { const Node_Id gnat_parent = Parent (gnat_node); + *gnat_smo = Empty; - /* If we are the prefix of the parent, then the access is above us. */ - if (node_is_component (gnat_parent) && Prefix (gnat_parent) == gnat_node) + switch (Nkind (gnat_parent)) { - *gnat_smo = Empty; + case N_Attribute_Reference: + /* If the parent is an attribute reference that requires an lvalue and + gnat_node is the Prefix (i.e. not a parameter), we do not need to + actually access any storage. */ + if (lvalue_required_for_attribute_p (gnat_parent) + && Prefix (gnat_parent) == gnat_node) + return; + break; + + case N_Object_Renaming_Declaration: + /* Nothing to do for the identifier in an object renaming declaration, + the renaming itself does not need storage model access. */ return; + + default: + break; } + /* If we are the prefix of the parent, then the access is above us. */ + if (node_is_component (gnat_parent) && Prefix (gnat_parent) == gnat_node) + return; + /* Now strip any type conversion from GNAT_NODE. */ if (Nkind (gnat_node) == N_Type_Conversion || Nkind (gnat_node) == N_Unchecked_Type_Conversion)