[Ada] Visibility error on used enumerated type
authorJustin Squirek <squirek@adacore.com>
Wed, 14 Nov 2018 11:41:09 +0000 (11:41 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 14 Nov 2018 11:41:09 +0000 (11:41 +0000)
This patch fixes an issue whereby the freezing of a nested package
containing an enumerated type declaration would cause visibility errors
on literals of such type when a use_all_type_clause for it appears
within the same declarative region.

2018-11-14  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* sem_ch7.adb (Uninstall_Declarations): Add conditional to avoid
uninstalling potential visibility during freezing on enumeration
literals.

gcc/testsuite/

* gnat.dg/enum5.adb: New testcase.

From-SVN: r266119

gcc/ada/ChangeLog
gcc/ada/sem_ch7.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/enum5.adb [new file with mode: 0644]

index dbd7ee3a0c638e3704906a81791c2250866ac160..2f23526e8b0f3fc30bf405086958ee5d88cedf38 100644 (file)
@@ -1,3 +1,9 @@
+2018-11-14  Justin Squirek  <squirek@adacore.com>
+
+       * sem_ch7.adb (Uninstall_Declarations): Add conditional to avoid
+       uninstalling potential visibility during freezing on enumeration
+       literals.
+
 2018-11-14  Jerome Lambourg  <lambourg@adacore.com>
 
        * env.c: Do not include crt_externs.h on iOS, as it does not
index 6e9f531573356a4625fed595c6e6ccadc9becdce..1c732b4281bb489b2f1e194fea98fd6d34d11c91 100644 (file)
@@ -2820,8 +2820,9 @@ package body Sem_Ch7 is
          --  a) If the entity is an operator, it may be a primitive operator of
          --  a type for which there is a visible use-type clause.
 
-         --  b) for other entities, their use-visibility is determined by a
-         --  visible use clause for the package itself. For a generic instance,
+         --  b) For other entities, their use-visibility is determined by a
+         --  visible use clause for the package itself or a use-all-type clause
+         --  applied directly to the entity's type. For a generic instance,
          --  the instantiation of the formals appears in the visible part,
          --  but the formals are private and remain so.
 
@@ -2854,6 +2855,16 @@ package body Sem_Ch7 is
                   Set_Is_Potentially_Use_Visible (Id);
                end if;
 
+            --  We need to avoid incorrectly marking enumeration literals
+            --  as non-visible when a visible use-all-type clause is in effect.
+
+            elsif Type_In_Use (Etype (Id))
+                    and then Nkind (Current_Use_Clause (Etype (Id))) =
+                               N_Use_Type_Clause
+                    and then All_Present (Current_Use_Clause (Etype (Id)))
+            then
+               null;
+
             else
                Set_Is_Potentially_Use_Visible (Id, False);
             end if;
index 3fddcce9510163337cfde3ff78bd1b0e9ccf2806..2103f49b4e8698bdc8467bf50acc0aeab772100b 100644 (file)
@@ -1,3 +1,7 @@
+2018-11-14  Justin Squirek  <squirek@adacore.com>
+
+       * gnat.dg/enum5.adb: New testcase.
+
 2018-11-14  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * gnat.dg/bip_exception.adb, gnat.dg/bip_exception.ads,
diff --git a/gcc/testsuite/gnat.dg/enum5.adb b/gcc/testsuite/gnat.dg/enum5.adb
new file mode 100644 (file)
index 0000000..2e2694a
--- /dev/null
@@ -0,0 +1,11 @@
+--  { dg-do compile }
+
+procedure Enum5 is
+   package Pack1 is
+      type Enum is (A, B, C);
+   end;
+   E1 : Pack1.Enum;
+   use all type Pack1.Enum;
+begin
+   E1 := A;
+end;