public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-3729] ada: Allow reuse of Enclosing_Declaration_Or_Statement by GNATprove
@ 2022-11-07  8:38 Marc Poulhi?s
  0 siblings, 0 replies; only message in thread
From: Marc Poulhi?s @ 2022-11-07  8:38 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:8f077c4d05876bf952c86131e477d21dc5d4492b

commit r13-3729-g8f077c4d05876bf952c86131e477d21dc5d4492b
Author: Piotr Trojanek <trojanek@adacore.com>
Date:   Fri Sep 25 10:43:27 2020 +0200

    ada: Allow reuse of Enclosing_Declaration_Or_Statement by GNATprove
    
    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.

Diff:
---
 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.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-07  8:38 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-07  8:38 [gcc r13-3729] ada: Allow reuse of Enclosing_Declaration_Or_Statement by GNATprove Marc Poulhi?s

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).