diff options
-rw-r--r-- | gcc/ada/sem_attr.adb | 9 | ||||
-rw-r--r-- | gcc/ada/sem_ch4.adb | 24 |
2 files changed, 23 insertions, 10 deletions
diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index c80cc06..7a488a7 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -6288,6 +6288,15 @@ package body Sem_Attr is if Comes_From_Source (N) then Check_Not_Incomplete_Type; + + -- 'Tag requires visibility on the corresponding package holding + -- the tag, so record a reference here, to avoid spurious unused + -- with_clause reported when compiling the main unit. + + if In_Extended_Main_Source_Unit (Current_Scope) then + Set_Referenced (P_Type, True); + Set_Referenced (Scope (P_Type), True); + end if; end if; -- Set appropriate type diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 61c7b4c..8d74338 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -9010,16 +9010,20 @@ package body Sem_Ch4 is Rewrite (First_Actual, Obj); end if; - -- The operation is obtained from the dispatch table and not by - -- visibility, and may be declared in a unit that is not explicitly - -- referenced in the source, but is nevertheless required in the - -- context of the current unit. Indicate that operation and its scope - -- are referenced, to prevent spurious and misleading warnings. If - -- the operation is overloaded, all primitives are in the same scope - -- and we can use any of them. - - Set_Referenced (Entity (Subprog), True); - Set_Referenced (Scope (Entity (Subprog)), True); + if In_Extended_Main_Source_Unit (Current_Scope) then + -- The operation is obtained from the dispatch table and not by + -- visibility, and may be declared in a unit that is not + -- explicitly referenced in the source, but is nevertheless + -- required in the context of the current unit. Indicate that + -- operation and its scope are referenced, to prevent spurious and + -- misleading warnings. If the operation is overloaded, all + -- primitives are in the same scope and we can use any of them. + -- Don't do that outside the main unit since otherwise this will + -- e.g. prevent the detection of some unused with clauses. + + Set_Referenced (Entity (Subprog), True); + Set_Referenced (Scope (Entity (Subprog)), True); + end if; Rewrite (Node_To_Replace, Call_Node); |