* [COMMITTED] ada: Allow reuse of Enclosing_Declaration_Or_Statement by GNATprove
@ 2022-11-07 8:40 Marc Poulhiès
0 siblings, 0 replies; only message in thread
From: Marc Poulhiès @ 2022-11-07 8:40 UTC (permalink / raw)
To: gcc-patches; +Cc: Piotr Trojanek
From: Piotr Trojanek <trojanek@adacore.com>
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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-11-07 8:40 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:40 [COMMITTED] 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).