Commit 7f0f5de1 by Justin Squirek Committed by Pierre-Marie de Rodat

[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
parent 39b76371
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
......
......@@ -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;
......
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,
......
-- { 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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment