blob: 19d255a639516565959a3a00cb4f2591a789863e [file] [log] [blame]
-- { dg-do run }
-- { dg-options "-gnatws" }
with System;
with Ada.Unchecked_Conversion;
procedure SSO15 is
type Arr is array (1 .. Integer'Size) of Boolean;
pragma Pack (Arr);
for Arr'Scalar_Storage_Order use System.High_Order_First;
function To_Float is new Ada.Unchecked_Conversion (Arr, Float);
function To_Int is new Ada.Unchecked_Conversion (Arr, Integer);
type R_Float is record
F : Float;
end record;
for R_Float'Bit_Order use System.High_Order_First;
for R_Float'Scalar_Storage_Order use System.High_Order_First;
type R_Int is record
I : Integer;
end record;
for R_Int'Bit_Order use System.High_Order_First;
for R_Int'Scalar_Storage_Order use System.High_Order_First;
A : Arr := (1 .. 2 => True, others => False);
F1 : Float;
F2 : R_Float;
for F2'Address use A'Address;
pragma Import (Ada, F2);
I1 : Integer;
I2 : R_Int;
for I2'Address use A'Address;
pragma Import (Ada, I2);
begin
-- Check that converting to FP yields a big-endian value.
F1 := To_Float (A);
if F2.F /= F1 then
raise Program_Error;
end if;
-- Check that converting to integer yields a big-endian value.
I1 := To_Int (A);
if I2.I /= I1 then
raise Program_Error;
end if;
end;