From patchwork Tue Jul 4 08:09:47 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: 115608 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp1053828vqx; Tue, 4 Jul 2023 01:10:56 -0700 (PDT) X-Google-Smtp-Source: APBJJlGZzSByVk9hEIoRLrLsRNbMSRQ7N8RRKBhRQK0Zh1jY73O2mcKWrNsTa07HEODZKoQKc+OD X-Received: by 2002:aa7:d742:0:b0:51d:aa00:bdd4 with SMTP id a2-20020aa7d742000000b0051daa00bdd4mr8638343eds.24.1688458255833; Tue, 04 Jul 2023 01:10:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688458255; cv=none; d=google.com; s=arc-20160816; b=LUv20ZD9zNCFPLP/WWug+CWMmxKDLBhQEvg708wgpJ4BEp/c2SXyd0+zE8XPbVQKWy CwbKTOKw5eX5byiUXNrm8g++LWEs9PkfArNtgwgSr8MOHPlDqr8Z7A1xBk8NDZEUye3O mBmY+1kW2tNqhE62t/zAr3g6JUcu9Y45ZbinoS4/LeyLL+VrjIR5VGaWcTqWBGNSNqDV 8p/z2a6zhMpklt26odgpQRsNQvfVdOaBd7MSWtUsiGFWwM053syVwpUaZRPTTX+Lhbrr Q4Rf0kpP0+igaUceaBEWv3SdRX5GoUzbSbA0CrH+yrAeURGDjpcvHIFoRUT3n1RCUUen 27oA== 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=Nc5kA0aU5F811jT1+Lf7CNNEsNZm6AX7fog+Xm/eB5o=; fh=hOhsC1930eHatDPYd2EALQ9Ry/g++vvN4vxlQkRuX+0=; b=T2v4XT7sV/mxvOetLot5IY1LNj2SOSpjm2kNp2IZ5w12xqaVbs2Dk+HAwGNDKE59X7 h6fI67C1YWNAtqoPYK1YI+kCmDRWI+qZTanNI/Xcy6WsYWkH0xCSnERWJU6MRo3V8KUy 5RvDpWKP2R/7+H57sIMjqU60eCO4JC3dyEyDQuvnRRTnYOFnVMWKBvR+V2sBmoWA8Phi NInNTJrwiTqUIDYGgd18p38OSdBRNqKWWIiBh4WoAlRTJtW0WxV41Iu3Qekj17qyxTQ8 l8BOYCuttOY/U2FEV4KFmaUpmStTdlGlCEg5IY8H0ZFqc9+xTQCX9qI1bpBGEIROLYk0 uTcA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=e0FQdDNQ; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 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 (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id g25-20020a056402181900b0051db246c805si7580646edy.382.2023.07.04.01.10.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jul 2023 01:10:55 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=e0FQdDNQ; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 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 16E5A3857340 for ; Tue, 4 Jul 2023 08:10:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 16E5A3857340 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1688458239; bh=Nc5kA0aU5F811jT1+Lf7CNNEsNZm6AX7fog+Xm/eB5o=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=e0FQdDNQOLNLX+fKNMYHBb1tpGoJlE8chS1jiNfjdXI8En9rMNyPj1IX0m4mMy28f x9v9MFB7/teQowmt0oa7tV7dTDTQFi/yzQ2jISuTIw/jO7jKyvwuMVyjplnQzWqlj5 hgQM182yE1UmjSWfYbwdeggZb2LBJGIZ0C9q2HLk= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) by sourceware.org (Postfix) with ESMTPS id 2C0BA3857713 for ; Tue, 4 Jul 2023 08:09:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2C0BA3857713 Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-4fb9fd28025so7345589e87.2 for ; Tue, 04 Jul 2023 01:09:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688458190; x=1691050190; 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=Nc5kA0aU5F811jT1+Lf7CNNEsNZm6AX7fog+Xm/eB5o=; b=JtmGjWHTDM8qjtYUJgYKMl5w9IF1TpmzEHCM0FudICizcpM7vXja408qeziitosfCJ V1prf9OjcPMWd/qfn5aZiD5VV55vCJWv8jJVaLcy+/IIIoOUP97knqlZOHFVXyzHkcKu l5JQ9fs5WeIsAyKOWIj1pPV8bKFp77nVaqTC72HCQG6kgE6EDMzeJvm0tXlXS4nPZzSK rVZ4CaNp+MjN64nxy9VZ1QUlITSP6XevtmbHXaKXmQ7h4azykvLJQn1qGBNACBNBme7D 2wg7uCYyMHvTejsWPLeJj+L2wBlHgay655v6ADzOwMRpaYxOdBC6kJ3z3aEWbvTy0MtT 2h5A== X-Gm-Message-State: ABy/qLZs12nFoPNJFBf1quzdOIIv/rLHlxW+jsdfxZwQ/UAJOfXNtI+/ DNhTJ2VUxo2i51rz0+nOJvqn4aLyZr20NX0EcUi2+g== X-Received: by 2002:a19:6d1c:0:b0:4f8:71bf:a25b with SMTP id i28-20020a196d1c000000b004f871bfa25bmr7569813lfc.9.1688458189677; Tue, 04 Jul 2023 01:09:49 -0700 (PDT) Received: from localhost.localdomain ([2001:861:3382:1a90:d29a:91eb:ac2b:8815]) by smtp.gmail.com with ESMTPSA id f4-20020a1c6a04000000b003fba2734f1esm20418152wmc.1.2023.07.04.01.09.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 04 Jul 2023 01:09:49 -0700 (PDT) To: gcc-patches@gcc.gnu.org Cc: Eric Botcazou Subject: [COMMITTED] ada: Small adjustments to new procedure Expand_Unchecked_Union_Equality Date: Tue, 4 Jul 2023 10:09:47 +0200 Message-Id: <20230704080947.998876-1-poulhies@adacore.com> X-Mailer: git-send-email 2.40.0 MIME-Version: 1.0 X-Spam-Status: No, score=-13.7 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?1770476803747789018?= X-GMAIL-MSGID: =?utf-8?q?1770476803747789018?= From: Eric Botcazou The procedure is not stable under repeated invocation. Now it may be called twice on the same node, for example during the expansion of the renaming of the predefined equality operator after the unchecked union type is frozen. gcc/ada/ * exp_ch4.ads (Expand_Unchecked_Union_Equality): Only take a single parameter. * exp_ch4.adb (Expand_Unchecked_Union_Equality): Add guard against repeated invocation on the same node. * exp_ch6.adb (Expand_Call): Only pass a single actual parameter in the call to Expand_Unchecked_Union_Equality. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/exp_ch4.adb | 16 ++++++++++------ gcc/ada/exp_ch4.ads | 8 ++------ gcc/ada/exp_ch6.adb | 6 ++---- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 63850131309..ec95d8b830b 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -13158,13 +13158,11 @@ package body Exp_Ch4 is -- Expand_Unchecked_Union_Equality -- ------------------------------------- - procedure Expand_Unchecked_Union_Equality - (N : Node_Id; - Eq : Entity_Id; - Lhs : Node_Id; - Rhs : Node_Id) - is + procedure Expand_Unchecked_Union_Equality (N : Node_Id) is Loc : constant Source_Ptr := Sloc (N); + Eq : constant Entity_Id := Entity (Name (N)); + Lhs : constant Node_Id := First_Actual (N); + Rhs : constant Node_Id := Next_Actual (Lhs); function Get_Discr_Values (Op : Node_Id; Lhs : Boolean) return Elist_Id; -- Return the list of inferred discriminant values for Op @@ -13335,6 +13333,12 @@ package body Exp_Ch4 is -- Start of processing for Expand_Unchecked_Union_Equality begin + -- Guard against repeated invocation on the same node + + if Present (Next_Actual (Rhs)) then + return; + end if; + -- If we can infer the discriminants of the operands, make a call to Eq if Has_Inferable_Discriminants (Lhs) diff --git a/gcc/ada/exp_ch4.ads b/gcc/ada/exp_ch4.ads index e8d966c8c33..39177cde369 100644 --- a/gcc/ada/exp_ch4.ads +++ b/gcc/ada/exp_ch4.ads @@ -105,13 +105,9 @@ package Exp_Ch4 is -- membership test. The whole membership is rewritten connecting these -- with OR ELSE. - procedure Expand_Unchecked_Union_Equality - (N : Node_Id; - Eq : Entity_Id; - Lhs : Node_Id; - Rhs : Node_Id); + procedure Expand_Unchecked_Union_Equality (N : Node_Id); -- Expand a call to the predefined equality operator of an unchecked union - -- type, possibly rewriting as a raise statement. + -- type, possibly rewriting it as a raise statement. function Integer_Promotion_Possible (N : Node_Id) return Boolean; -- Returns true if the node is a type conversion whose operand is an diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index 44ae10aa342..2e3a2b3edcc 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -2933,12 +2933,10 @@ package body Exp_Ch6 is elsif Is_Unchecked_Union_Equality (N) then declare - Eq : constant Entity_Id := Entity (Name (N)); - Lhs : constant Node_Id := First_Actual (N); - Rhs : constant Node_Id := Next_Actual (Lhs); + Eq : constant Entity_Id := Entity (Name (N)); begin - Expand_Unchecked_Union_Equality (N, Eq, Lhs, Rhs); + Expand_Unchecked_Union_Equality (N); -- If the call was not rewritten as a raise, expand the actuals