]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Avoid xref on out params of TSS
authorBob Duff <duff@adacore.com>
Tue, 7 Nov 2023 12:37:51 +0000 (07:37 -0500)
committerMarc Poulhiès <poulhies@adacore.com>
Tue, 9 Jan 2024 13:13:29 +0000 (14:13 +0100)
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.

gcc/ada/lib-xref.adb

index 3d6b29862b300443eaf47914b78a44aad3dd2db5..340f5ca73aef472ea7c3c17808159f351ba06ac8 100644 (file)
@@ -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