1-- { dg-do compile } 2 3with Ada.Text_IO; 4 5procedure Inline_Always1 is 6 7 function S(N : Integer ) return String is 8 begin 9 return "hello world"; 10 end S; 11 12 type String_Access is access all String; 13 type R is record 14 SA : String_Access; 15 end record; 16 17 Data : aliased String := "hello world"; 18 My_SA : constant String_Access := Data'Access; 19 function Make_R( S : String ) return R is 20 My_R : R; 21 begin 22 My_R.SA := My_SA; 23 return My_R; 24 end Make_R; 25 26 function Get_String( My_R : R ) return String 27 is 28 begin 29 return S : String(My_R.SA.all'Range) do 30 S := My_R.SA.all; 31 end return; 32 end Get_String; 33 pragma Inline_Always( Get_String); 34 35 My_R : constant R := Make_R( "hello world"); 36begin 37 for I in 1..10000 loop 38 declare 39 Res : constant String := S( 4 ); 40 begin 41 Ada.Text_IO.Put_Line(Res); 42 end; 43 declare 44 Res : constant String := S( 4 ); 45 begin 46 Ada.Text_IO.Put_Line(Res); 47 end; 48 49 declare 50 S : constant String := Get_String( My_R ); 51 begin 52 Ada.Text_IO.Put_Line(S); 53 Ada.Text_IO.Put_Line(My_R.SA.all); 54 end; 55 end loop; 56 57end Inline_Always1; 58