frame_overflow.adb   [plain text]


-- { dg-do compile }

procedure frame_overflow is

   type Bitpos_Range_T is new Positive;
   type Bitmap_Array_T is array (Bitpos_Range_T) of Boolean;

   type Bitmap_T is record
      Bits : Bitmap_Array_T := (others => False);
   end record;
   
   function -- { dg-error "too large" "" }
     Set_In (Bitmap : Bitmap_T; Bitpos : Bitpos_Range_T)  return Bitmap_T
   is
      Result: Bitmap_T := Bitmap;
   begin
      Result.Bits (Bitpos) := True;
      return Result;
   end;

   function -- { dg-error "too large" "" }
     Negate (Bitmap : Bitmap_T) return Bitmap_T is
      Result: Bitmap_T;
   begin
      for E in Bitpos_Range_T loop
        Result.Bits (E) := not Bitmap.Bits (E);
      end loop;
      return Result;
  end;

begin
   null;
end;