[Ada] Spurious visibility error on subunit with optimization
authorEd Schonberg <schonberg@adacore.com>
Thu, 12 Dec 2019 10:02:47 +0000 (10:02 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 12 Dec 2019 10:02:47 +0000 (10:02 +0000)
2019-12-12  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch10.adb (Analyze_Subunit): Fix spurious visibility error
on subunit with optimization.

From-SVN: r279291

gcc/ada/ChangeLog
gcc/ada/sem_ch10.adb

index f911670d4ec272b9f4ab5fdf15d7efa77f221071..48448b2a01951f3a83b0dc10b8d3a85a66bb0fbc 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-12  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch10.adb (Analyze_Subunit): Fix spurious visibility error
+       on subunit with optimization.
+
 2019-12-12  Arnaud Charlet  <charlet@adacore.com>
 
        * raise-gcc.c (__gnat_personality_v0): Define for SEH.
index c5d10f761b1d77e84609967e80b0db37c6beb846..16f0807fc865cd6b055450ea2ee184309c23d5f5 100644 (file)
@@ -2226,9 +2226,18 @@ package body Sem_Ch10 is
 
          --  If the subunit occurs within a child unit, we must restore the
          --  immediate visibility of any siblings that may occur in context.
+         --  In addition, we must reset the previous visibility of the
+         --  parent unit which is now on the scope stack. This is because
+         --  the Previous_Visibility was previously set when removing the
+         --  context. This is necessary to prevent the parent entity from
+         --  remaining visible after the subunit is compiled. This only
+         --  has an effect if a homonym exists in a body to be processed
+         --  later if inlining is enabled.
 
          if Present (Enclosing_Child) then
             Install_Siblings (Enclosing_Child, L);
+            Scope_Stack.Table (Scope_Stack.Last).Previous_Visibility :=
+              False;
          end if;
 
          Push_Scope (Scop);