diff options
author | Piotr Trojanek <trojanek@adacore.com> | 2020-09-25 10:43:27 +0200 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2022-11-07 09:36:32 +0100 |
commit | 8f077c4d05876bf952c86131e477d21dc5d4492b (patch) | |
tree | a0a1ff0b0855c48d0e44929b186cd3e4fc452dcf /gcc/ada | |
parent | f073f3355643587073ce224563f509332043c381 (diff) | |
download | gcc-8f077c4d05876bf952c86131e477d21dc5d4492b.zip gcc-8f077c4d05876bf952c86131e477d21dc5d4492b.tar.gz gcc-8f077c4d05876bf952c86131e477d21dc5d4492b.tar.bz2 |
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.
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/sem_res.adb | 31 | ||||
-rw-r--r-- | gcc/ada/sem_util.adb | 27 | ||||
-rw-r--r-- | 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 ea9a03b..402da43 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 5c49576..5965fa1 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 88bfbfc..5c08cb8 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. |