-- { 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;