[Ada] Spurious ineffective with clause warnings on use type clause

2020-06-03  Justin Squirek  <squirek@adacore.com>

gcc/ada/

	* sem_ch10.adb (Process_Body_Clauses): Add loop to interate
	through all prefixes in a use_type clause so that all packages
	in the expanded name get examined for effectiveness.
This commit is contained in:
Justin Squirek 2020-01-17 09:10:43 -05:00 committed by Pierre-Marie de Rodat
parent dca8f39d62
commit 48b185bd01

View File

@ -320,7 +320,6 @@ package body Sem_Ch10 is
Nam_Ent : constant Entity_Id := Entity (Name (Clause));
Cont_Item : Node_Id;
Prag_Unit : Node_Id;
Subt_Mark : Node_Id;
Use_Item : Node_Id;
function Same_Unit (N : Node_Id; P : Entity_Id) return Boolean;
@ -390,12 +389,24 @@ package body Sem_Ch10 is
elsif Nkind (Cont_Item) = N_Use_Type_Clause
and then not Used_Type_Or_Elab
then
Subt_Mark := Subtype_Mark (Cont_Item);
if not Used_Type_Or_Elab
and then Same_Unit (Prefix (Subt_Mark), Nam_Ent)
then
Used_Type_Or_Elab := True;
end if;
declare
UE : Node_Id;
begin
-- Loop through prefixes looking for a match
UE := Prefix (Subtype_Mark (Cont_Item));
loop
if not Used_Type_Or_Elab
and then Same_Unit (UE, Nam_Ent)
then
Used_Type_Or_Elab := True;
end if;
exit when Nkind (UE) /= N_Expanded_Name;
UE := Prefix (UE);
end loop;
end;
-- Pragma Elaborate or Elaborate_All