From 48b185bd015b72e43736e79887afe31296ae5fe2 Mon Sep 17 00:00:00 2001 From: Justin Squirek Date: Fri, 17 Jan 2020 09:10:43 -0500 Subject: [PATCH] [Ada] Spurious ineffective with clause warnings on use type clause 2020-06-03 Justin Squirek 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. --- gcc/ada/sem_ch10.adb | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb index b0f1ed3bbe2..944abfe977a 100644 --- a/gcc/ada/sem_ch10.adb +++ b/gcc/ada/sem_ch10.adb @@ -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 -- 2.30.2