aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_ch7.adb
diff options
context:
space:
mode:
authorJustin Squirek <squirek@adacore.com>2018-11-14 11:41:09 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2018-11-14 11:41:09 +0000
commit7f0f5de19093d4550b48d3a26f1869e8def3f7e8 (patch)
treeb276ce52e71a384ada6830fbeffcd3292664a52e /gcc/ada/sem_ch7.adb
parent39b763713cdc656911944ea56225f77e9f27d4e3 (diff)
downloadgcc-7f0f5de19093d4550b48d3a26f1869e8def3f7e8.zip
gcc-7f0f5de19093d4550b48d3a26f1869e8def3f7e8.tar.gz
gcc-7f0f5de19093d4550b48d3a26f1869e8def3f7e8.tar.bz2
[Ada] Visibility error on used enumerated type
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
Diffstat (limited to 'gcc/ada/sem_ch7.adb')
-rw-r--r--gcc/ada/sem_ch7.adb15
1 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb
index 6e9f531..1c732b4 100644
--- a/gcc/ada/sem_ch7.adb
+++ b/gcc/ada/sem_ch7.adb
@@ -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;