]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Cleanup collecting of implicit outputs
authorPiotr Trojanek <trojanek@adacore.com>
Thu, 4 Jan 2024 16:10:47 +0000 (17:10 +0100)
committerMarc Poulhiès <poulhies@adacore.com>
Mon, 6 May 2024 09:11:32 +0000 (11:11 +0200)
Move handling of IN parameters to where both IN and IN OUT parameters
are handled. This makes the code marginally more efficient and
symmetrical to handling of implicit inputs.

gcc/ada/

* sem_prag.adb (Collect_Global_Item): Move code.

gcc/ada/sem_prag.adb

index ab60a8ad1d50bc8b99a4323c79a52eb941a7e613..25a98cb414e7914fbf9a7474d2c03a38816f0f7b 100644 (file)
@@ -31651,6 +31651,17 @@ package body Sem_Prag is
          while Present (Formal) loop
             if Ekind (Formal) in E_In_Out_Parameter | E_In_Parameter then
                Append_New_Elmt (Formal, Subp_Inputs);
+
+               --  IN parameters of procedures and protected entries can act as
+               --  outputs when the related type is access-to-variable.
+
+               if Ekind (Formal) = E_In_Parameter
+                 and then Ekind (Spec_Id) not in E_Function
+                                               | E_Generic_Function
+                 and then Is_Access_Variable (Etype (Formal))
+               then
+                  Append_New_Elmt (Formal, Subp_Outputs);
+               end if;
             end if;
 
             if Ekind (Formal) in E_In_Out_Parameter | E_Out_Parameter then
@@ -31667,17 +31678,6 @@ package body Sem_Prag is
                end if;
             end if;
 
-            --  IN parameters of procedures and protected entries can act as
-            --  outputs when the related type is access-to-variable.
-
-            if Ekind (Formal) = E_In_Parameter
-              and then Ekind (Spec_Id) not in E_Function
-                                            | E_Generic_Function
-              and then Is_Access_Variable (Etype (Formal))
-            then
-               Append_New_Elmt (Formal, Subp_Outputs);
-            end if;
-
             Next_Formal (Formal);
          end loop;