In GNATprove, local subprograms without contracts are candidates for
inlining, so that they are only analyzed in the context of their calls.
This does not apply to dispatching operations, which may be called
through dispatching, in an unknown calling context. Hence such
operations should not be considered as candidates for inlining.

There is no test as this has no effect on compilation.

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-09-17  Yannick Moy  <m...@adacore.com>

gcc/ada/

        * inline.adb (Can_Be_Inlined_In_GNATprove_Mode): Add handling
        for dispatching operations.
--- gcc/ada/inline.adb
+++ gcc/ada/inline.adb
@@ -1681,6 +1681,12 @@ package body Inline is
       elsif not In_Extended_Main_Code_Unit (Id) then
          return False;
 
+      --  Do not inline dispatching operations, as only their static calls
+      --  can be analyzed in context, and not their dispatching calls.
+
+      elsif Is_Dispatching_Operation (Id) then
+         return False;
+
       --  Do not inline subprograms marked No_Return, possibly used for
       --  signaling errors, which GNATprove handles specially.
 

Reply via email to