From: Bob Duff Date: Tue, 7 Nov 2023 12:37:51 +0000 (-0500) Subject: ada: Avoid xref on out params of TSS X-Git-Tag: basepoints/gcc-15~3097 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b9d4258ea755c04f7a7ac1c5e054c098f4bbc93;p=thirdparty%2Fgcc.git ada: Avoid xref on out params of TSS For an actual passed as an 'in out' parameter of a type support subprogram such as deep finalize, do not count it as a read reference of the actual. Clearly these should not count. Furthermore, counting them causes different warnings in -gnatc mode compared to normal mode, because the calls only exist in normal mode, which would disable the warnings. Such warnings now occur in both modes, instead of just with -gnatc. gcc/ada/ * lib-xref.adb (Generate_Reference): Do not count it as a read reference if we're calling a TSS. --- diff --git a/gcc/ada/lib-xref.adb b/gcc/ada/lib-xref.adb index 3d6b29862b30..340f5ca73aef 100644 --- a/gcc/ada/lib-xref.adb +++ b/gcc/ada/lib-xref.adb @@ -29,6 +29,7 @@ with Einfo; use Einfo; with Einfo.Utils; use Einfo.Utils; with Elists; use Elists; with Errout; use Errout; +with Exp_Tss; use Exp_Tss; with Lib.Util; use Lib.Util; with Nlists; use Nlists; with Opt; use Opt; @@ -789,10 +790,15 @@ package body Lib.Xref is elsif Kind = E_In_Out_Parameter and then Is_Assignable (E) then - -- For sure this counts as a normal read reference + -- We count it as a read reference unless we're calling a + -- type support subprogram such as deep finalize. - Set_Referenced (E); - Set_Last_Assignment (E, Empty); + if not Is_Entity_Name (Name (Call)) + or else Get_TSS_Name (Entity (Name (Call))) = TSS_Null + then + Set_Referenced (E); + Set_Last_Assignment (E, Empty); + end if; -- We count it as being referenced as an out parameter if the -- option is set to warn on all out parameters, except that we