-- { dg-do compile } with Ada.Text_IO; procedure Inline_Always1 is function S(N : Integer ) return String is begin return "hello world"; end S; type String_Access is access all String; type R is record SA : String_Access; end record; Data : aliased String := "hello world"; My_SA : constant String_Access := Data'Access; function Make_R( S : String ) return R is My_R : R; begin My_R.SA := My_SA; return My_R; end Make_R; function Get_String( My_R : R ) return String is begin return S : String(My_R.SA.all'Range) do S := My_R.SA.all; end return; end Get_String; pragma Inline_Always( Get_String); My_R : constant R := Make_R( "hello world"); begin for I in 1..10000 loop declare Res : constant String := S( 4 ); begin Ada.Text_IO.Put_Line(Res); end; declare Res : constant String := S( 4 ); begin Ada.Text_IO.Put_Line(Res); end; declare S : constant String := Get_String( My_R ); begin Ada.Text_IO.Put_Line(S); Ada.Text_IO.Put_Line(My_R.SA.all); end; end loop; end Inline_Always1;