[Ada] Reuse Package_Specification in Is_Incomplete_Or_Private_Type

gcc/ada/

	* sem_aux.adb (Package_Specification): Add assertions to confirm
	the kind of the of parameter and returned node.
	* sem_ch12.adb (Remove_Parent): Reorder conditions; this change
	appears to be semantically neutral, but is enough to avoid the
	problematic call to Package_Specification.
	* sem_util.adb (Is_Incomplete_Or_Private_Type): Replace loop
	with a call to Package_Specification.
This commit is contained in:
Piotr Trojanek 2021-03-22 15:38:34 +01:00 committed by Pierre-Marie de Rodat
parent a34ce7c5df
commit f86c2f9c8e
3 changed files with 13 additions and 14 deletions

View File

@ -1421,12 +1421,16 @@ package body Sem_Aux is
N : Node_Id;
begin
pragma Assert (Is_Package_Or_Generic_Package (E));
N := Parent (E);
if Nkind (N) = N_Defining_Program_Unit_Name then
N := Parent (N);
end if;
pragma Assert (Nkind (N) = N_Package_Specification);
return N;
end Package_Specification;

View File

@ -15222,14 +15222,15 @@ package body Sem_Ch12 is
-- subunit of a generic contains an instance of a child unit of
-- its generic parent unit.
elsif S = Current_Scope and then Is_Generic_Instance (S) then
elsif S = Current_Scope and then Is_Generic_Instance (S)
and then (In_Package_Body (S) or else In_Private_Part (S))
then
declare
Par : constant Entity_Id :=
Generic_Parent (Package_Specification (S));
begin
if Present (Par)
and then P = Scope (Par)
and then (In_Package_Body (S) or else In_Private_Part (S))
then
Set_In_Private_Part (P);
Install_Private_Declarations (P);

View File

@ -14751,17 +14751,11 @@ package body Sem_Util is
-- Private or Taft amendment type case
declare
Pkg_Decl : Node_Id;
begin
if Present (S) and then Is_Package_Or_Generic_Package (S) then
Pkg_Decl := S;
while Nkind (Pkg_Decl) /= N_Package_Specification loop
Pkg_Decl := Parent (Pkg_Decl);
end loop;
if Present (S) and then Is_Package_Or_Generic_Package (S) then
declare
Pkg_Decl : constant Node_Id := Package_Specification (S);
begin
-- It is knows that Typ has a private view, look for it in the
-- visible declarations of the enclosing scope. A special case
-- of this is when the two views have been exchanged - the full
@ -14785,8 +14779,8 @@ package body Sem_Util is
elsif In_Package_Body (S) then
return Inspect_Decls (Private_Declarations (Pkg_Decl), True);
end if;
end if;
end;
end;
end if;
-- The type has no incomplete or private view