[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:
parent
dca8f39d62
commit
48b185bd01
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user