-- Shows stack some addresses with infinite recursion
with Text_IO; use Text_IO;
with System.Address_Image;
with Ada.Exceptions; use Ada.Exceptions;
procedure infrec is
   count : Natural := 0;
   procedure A is
      ai: Integer;   -- Unitialized
   begin
      if count <= 3 then 
         put_line("Address of ai: " & System.Address_Image(ai'address));
      end if;
      count := count + 1;

      A;  --  Infinite recursion!

   exception
      when e: others => 
         put_line (exception_name (e) & ": " & exception_message (e));
         put_line ("Count: " & count'img);
         put_line("Address of ai: " & System.Address_Image(ai'address));
   end A; 

   i: Integer;      -- Address of i: BF98044C

begin

   put_line("Address of i: " & System.Address_Image(i'address));
   new_line;

   A;               -- ai and Address of ai: -1080556592: BF980380

exception
   when e: others => 
      new_line;
      put_line ("ERROR: " & exception_name (e) & ": " & exception_message (e));
end infrec;
--  Address of i: BF82D658
--  
--  Address of ai: BF82D2D0
--  Address of ai: BF82CE00
--  Address of ai: BF82C930
--  Address of ai: BF82C460
--  
--  STORAGE_ERROR: stack overflow or erroneous memory access
--  Count:  6806
--  Address of ai: BF02E5C0

--  Address of i: BFF937FC
--  
--  Address of ai: BFF934E0
--  Address of ai: BFF93170
--  Address of ai: BFF92E00
--  Address of ai: BFF92A90
--  STORAGE_ERROR: stack overflow or erroneous memory access
--  Count:  9524
--  Address of ai: BF795590