[COMMITTED] ada: Simplify removal of formals from the scope

Message ID 20230529082900.2409386-1-poulhies@adacore.com
State Committed
Commit e73516e5ccd617aa50a5b0111b35aa063e1a6fd5
Headers
Series [COMMITTED] ada: Simplify removal of formals from the scope |

Commit Message

Marc Poulhiès May 29, 2023, 8:29 a.m. UTC
  From: Piotr Trojanek <trojanek@adacore.com>

Calls to Install_Formals are typically enclosed by Push_Scope/End_Scope.
There were just two such calls that instead used Pop_Scope, but most
likely that was by mistake.

Cleanup related to handling of class-wide contracts. Behavior appears to
be unaffected.

gcc/ada/

	* contracts.adb (Remove_Formals): Remove.
	(Preanalyze_Condition): Replace Pop_Scope with End_Scope.
	* sem_ch13.adb (Build_Discrete_Static_Predicate): Replace
	Pop_Scope with End_Scope; enclose Install_Formals within
	Push_Scope/End_Scope.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/contracts.adb | 21 +--------------------
 gcc/ada/sem_ch13.adb  |  4 ++--
 2 files changed, 3 insertions(+), 22 deletions(-)
  

Patch

diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb
index 9d02887cfa1..65f341abc8f 100644
--- a/gcc/ada/contracts.adb
+++ b/gcc/ada/contracts.adb
@@ -4846,9 +4846,6 @@  package body Contracts is
       --  Traverse Expr and clear the Controlling_Argument of calls to
       --  nonabstract functions.
 
-      procedure Remove_Formals (Id : Entity_Id);
-      --  Remove formals from homonym chains and make them not visible
-
       procedure Restore_Original_Selected_Component;
       --  Traverse Expr searching for dispatching calls to functions whose
       --  original node was a selected component, and replace them with
@@ -4898,21 +4895,6 @@  package body Contracts is
          Remove_Ctrl_Args (Expr);
       end Remove_Controlling_Arguments;
 
-      --------------------
-      -- Remove_Formals --
-      --------------------
-
-      procedure Remove_Formals (Id : Entity_Id) is
-         F : Entity_Id := First_Formal (Id);
-
-      begin
-         while Present (F) loop
-            Set_Is_Immediately_Visible (F, False);
-            Remove_Homonym (F);
-            Next_Formal (F);
-         end loop;
-      end Remove_Formals;
-
       -----------------------------------------
       -- Restore_Original_Selected_Component --
       -----------------------------------------
@@ -5032,8 +5014,7 @@  package body Contracts is
       Preanalyze_Spec_Expression (Expr, Standard_Boolean);
 
       Inside_Class_Condition_Preanalysis := False;
-      Remove_Formals (Subp);
-      Pop_Scope;
+      End_Scope;
 
       --  If this preanalyzed condition has occurrences of dispatching calls
       --  using the Object.Operation notation, during preanalysis such calls
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index 958b26ebb0d..85c9d92e630 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -9757,10 +9757,10 @@  package body Sem_Ch13 is
 
                --  Resolve new expression in function context
 
-               Install_Formals (Predicate_Function (Typ));
                Push_Scope (Predicate_Function (Typ));
+               Install_Formals (Predicate_Function (Typ));
                Analyze_And_Resolve (Expr, Standard_Boolean);
-               Pop_Scope;
+               End_Scope;
             end if;
          end;
       end;