From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by sourceware.org (Postfix) with ESMTPS id F1279385802B for ; Mon, 7 Nov 2022 08:40:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F1279385802B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=adacore.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=adacore.com Received: by mail-wr1-x433.google.com with SMTP id g12so14995751wrs.10 for ; Mon, 07 Nov 2022 00:40:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adacore.com; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ZPe/yssNuCXOBN5lHMjbVgqAZRpfV0V5YjHq/LyJxT8=; b=ihYx2L7ZKlhw6VCx4hZTS814MlmR/4azdIijr9yA3dBfhb0wRvPVvnE8nKmq2zz5ZH upFmu1jU9Y2jUhQr416FIfuhAHcwCbc7SwuozlkdZcIZX+HAp8iFPxMpf3Q2UN89eErr KHXyjmDvcB3qyhIGa8Q7AwqCZfLfH1lXyjTQYUDJ8tyQFOUkWceMeZC7M5Hxx7XUnacT D3ES2Ft7i2baBoAPc3yDB+bEb1Vc7/BqWnF5XBFsgCvA7WJd6gE7bjrm72rDoZuXs6fu /Sghjyh0IPC+2mI/KMtYiYxHpVtrBir+nqkxGXlUYrm8pc2LOohq8ToP2tMx8jCzMjIc C/Dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=ZPe/yssNuCXOBN5lHMjbVgqAZRpfV0V5YjHq/LyJxT8=; b=mK/f08vrxSXU+xvHrHcCsgYM74LIVbrXo4cXhEPP5dJbXzj9naBHHDMKvE1SGK5/ek DDgTlrU3xrfFpPvMzZL51ykpQ6rdUc6oIEm/T/MhN8ODylsmrYUUEMheJaCa4pi+guHv O2MKJHR1Rd0z6/b3NmARvc1X3juOir95y1UQ+59b5THurm7G/23UyoxE0EljQp7Zyhlb 2xZmbxAEHf9PVqlzxBYHJkD7cNs6hmkprr0+LK2mtjq3byTmvwBeakW6XMd7Nhd4EjNb ebaRp+5jpNhmw9YIFHOV9NshvqV4+XQnK/pwOHPkkR5ompwtSnXQQ0FvhgBOlYfgrRZD 7vgg== X-Gm-Message-State: ACrzQf2oMdl+kgjhyuR/Aw2NHuFexv6AcYd4p7HFXGMgkR3fDO2Nk/Cu GqSdsgQMsAUmGo9YdgZwwBU4MKNKvqlXFQ== X-Google-Smtp-Source: AMsMyM5aQsgdHtSFdqD5l2ThmQu74PFdGC889r6zC+R+XTU7MyFXSeMuPDWmsV72OnkjzuJxGHE5XQ== X-Received: by 2002:adf:eacd:0:b0:236:bd21:42d with SMTP id o13-20020adfeacd000000b00236bd21042dmr26554041wrn.242.1667810413863; Mon, 07 Nov 2022 00:40:13 -0800 (PST) Received: from poulhies-Precision-5550.lan (static-176-191-105-132.ftth.abo.bbox.fr. [176.191.105.132]) by smtp.gmail.com with ESMTPSA id f17-20020a056000129100b002368a6deaf8sm6599141wrx.57.2022.11.07.00.40.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 07 Nov 2022 00:40:13 -0800 (PST) From: =?UTF-8?q?Marc=20Poulhi=C3=A8s?= To: gcc-patches@gcc.gnu.org Cc: Piotr Trojanek Subject: [COMMITTED] ada: Allow reuse of Enclosing_Declaration_Or_Statement by GNATprove Date: Mon, 7 Nov 2022 09:40:11 +0100 Message-Id: <20221107084011.150984-1-poulhies@adacore.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_ASCII_DIVIDERS,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 List-Id: From: Piotr Trojanek Move routine Enclosing_Declaration_Or_Statement from body of Sem_Res to spec of Sem_Util, so it can be reused. In particular, GNATprove needs this functionality to climb from an arbitrary subexpression with target_name (@) to the enclosing assignment statement. Behaviour of the compiler is unaffected. gcc/ada/ * sem_res.adb (Enclosing_Declaration_Or_Statement): Moved to Sem_Util. * sem_util.ads (Enclosing_Declaration_Or_Statement): Moved from Sem_Res. * sem_util.adb (Enclosing_Declaration_Or_Statement): Likewise. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/sem_res.adb | 31 ------------------------------- gcc/ada/sem_util.adb | 27 +++++++++++++++++++++++++++ gcc/ada/sem_util.ads | 4 ++++ 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index ea9a03b58e6..402da430b2f 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -895,10 +895,6 @@ package body Sem_Res is ------------------------------ function Check_Infinite_Recursion (Call : Node_Id) return Boolean is - function Enclosing_Declaration_Or_Statement (N : Node_Id) return Node_Id; - -- Return the nearest enclosing declaration or statement that houses - -- arbitrary node N. - function Invoked_With_Different_Arguments (N : Node_Id) return Boolean; -- Determine whether call N invokes the related enclosing subprogram -- with actuals that differ from the subprogram's formals. @@ -934,33 +930,6 @@ package body Sem_Res is -- Determine whether arbitrary node N appears within a conditional -- construct. - ---------------------------------------- - -- Enclosing_Declaration_Or_Statement -- - ---------------------------------------- - - function Enclosing_Declaration_Or_Statement - (N : Node_Id) return Node_Id - is - Par : Node_Id; - - begin - Par := N; - while Present (Par) loop - if Is_Declaration (Par) or else Is_Statement (Par) then - return Par; - - -- Prevent the search from going too far - - elsif Is_Body_Or_Package_Declaration (Par) then - exit; - end if; - - Par := Parent (Par); - end loop; - - return N; - end Enclosing_Declaration_Or_Statement; - -------------------------------------- -- Invoked_With_Different_Arguments -- -------------------------------------- diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 5c495761df1..5965fa1fbb7 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -8271,6 +8271,33 @@ package body Sem_Util is return Decl; end Enclosing_Declaration; + ---------------------------------------- + -- Enclosing_Declaration_Or_Statement -- + ---------------------------------------- + + function Enclosing_Declaration_Or_Statement + (N : Node_Id) return Node_Id + is + Par : Node_Id; + + begin + Par := N; + while Present (Par) loop + if Is_Declaration (Par) or else Is_Statement (Par) then + return Par; + + -- Prevent the search from going too far + + elsif Is_Body_Or_Package_Declaration (Par) then + exit; + end if; + + Par := Parent (Par); + end loop; + + return N; + end Enclosing_Declaration_Or_Statement; + ---------------------------- -- Enclosing_Generic_Body -- ---------------------------- diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index 88bfbfc2086..5c08cb8b9ab 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -809,6 +809,10 @@ package Sem_Util is -- Returns the declaration node enclosing N (including possibly N itself), -- if any, or Empty otherwise. + function Enclosing_Declaration_Or_Statement (N : Node_Id) return Node_Id; + -- Return the nearest enclosing declaration or statement that houses + -- arbitrary node N. + function Enclosing_Generic_Body (N : Node_Id) return Node_Id; -- Returns the Node_Id associated with the innermost enclosing generic -- body, if any. If none, then returns Empty. -- 2.34.1