GNAT was ignoring the 'private' keyword for parent packages implicitly
withed from a subprogram unit, via a child unit.

Tested on x86_64-pc-linux-gnu, committed on trunk

2020-06-17  Arnaud Charlet  <char...@adacore.com>

gcc/ada/

        * sem_ch10.adb (Expand_With_Clause): Add missing handling of
        N_Generic_Subprogram_Declaration, N_Subprogram_Declaration,
        N_Subprogram_Body.
--- gcc/ada/sem_ch10.adb
+++ gcc/ada/sem_ch10.adb
@@ -3197,12 +3197,16 @@ package body Sem_Ch10 is
       Set_Library_Unit       (Withn, Parent (Unit_Declaration_Node (Ent)));
       Set_Parent_With        (Withn);
 
-      --  If the unit is a package or generic package declaration, a private_
-      --  with_clause on a child unit implies that the implicit with on the
-      --  parent is also private.
+      --  If the unit is a [generic] package or subprogram declaration
+      --  (including a subprogram body acting as spec), a private_with_clause
+      --  on a child unit implies that the implicit with on the parent is also
+      --  private.
 
       if Nkind_In (Unit (N), N_Generic_Package_Declaration,
-                             N_Package_Declaration)
+                             N_Package_Declaration,
+                             N_Generic_Subprogram_Declaration,
+                             N_Subprogram_Declaration,
+                             N_Subprogram_Body)
       then
          Set_Private_Present (Withn, Private_Present (Item));
       end if;

Reply via email to