-- { dg-do run }
-- { dg-options "-O2 -gnatp -fno-omit-frame-pointer" }

procedure Opt76 is

   type Integer_Access is access Integer;
   type Registry_Array is array (Natural range <>) of Integer_Access;

   procedure Nested (Input, Parser : Integer; A, B : Boolean) is

      Index : Registry_Array (1 .. 1024);
      Not_B : constant Boolean := not B;

      procedure Inner (Input : Integer) is
      begin
         if Input /= 1 then
            raise Program_Error;
         end if;

         if Parser = 128 and then A and then Not_B then
            Inner (Input);
            Index (Index'First) := null;
         end if;
      end;

   begin
      Inner (Input);
   end;

   Input : Integer := 1 with Volatile;
   Parser : Integer := 2 with Volatile;
      
begin
   Nested (Input, Parser, False, True);
   Nested (Input, Parser, True, False);
end;