53 lines
1.3 KiB
Ada
53 lines
1.3 KiB
Ada
-- { dg-do run }
|
|
-- { dg-options "-gnatws" }
|
|
|
|
with System;
|
|
with Ada.Unchecked_Conversion;
|
|
|
|
procedure SSO14 is
|
|
|
|
type Arr is array (1 .. Integer'Size) of Boolean;
|
|
pragma Pack (Arr);
|
|
for Arr'Scalar_Storage_Order use System.High_Order_First;
|
|
|
|
function From_Float is new Ada.Unchecked_Conversion (Float, Arr);
|
|
function From_Int is new Ada.Unchecked_Conversion (Integer, Arr);
|
|
|
|
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;
|
|
|
|
F1 : Float := 1.234567;
|
|
FA : Arr;
|
|
F2 : R_Float;
|
|
for F2'Address use FA'Address;
|
|
pragma Import (Ada, F2);
|
|
|
|
I1 : Integer := 1234567;
|
|
IA : Arr;
|
|
I2 : R_Int;
|
|
for I2'Address use IA'Address;
|
|
pragma Import (Ada, I2);
|
|
|
|
begin
|
|
-- Check that converting a FP value yields a big-endian array
|
|
FA := From_Float (F1);
|
|
if F2.F /= F1 then
|
|
raise Program_Error;
|
|
end if;
|
|
|
|
-- Check that converting an integer value yields a big-endian array.
|
|
IA := From_Int (I1);
|
|
if I2.I /= I1 then
|
|
raise Program_Error;
|
|
end if;
|
|
end;
|