1-- { dg-do run } 2-- { dg-options "-gnatws" } 3 4with System; 5with Ada.Unchecked_Conversion; 6 7procedure SSO14 is 8 9 type Arr is array (1 .. Integer'Size) of Boolean; 10 pragma Pack (Arr); 11 for Arr'Scalar_Storage_Order use System.High_Order_First; 12 13 function From_Float is new Ada.Unchecked_Conversion (Float, Arr); 14 function From_Int is new Ada.Unchecked_Conversion (Integer, Arr); 15 16 type R_Float is record 17 F : Float; 18 end record; 19 for R_Float'Bit_Order use System.High_Order_First; 20 for R_Float'Scalar_Storage_Order use System.High_Order_First; 21 22 type R_Int is record 23 I : Integer; 24 end record; 25 for R_Int'Bit_Order use System.High_Order_First; 26 for R_Int'Scalar_Storage_Order use System.High_Order_First; 27 28 F1 : Float := 1.234567; 29 FA : Arr; 30 F2 : R_Float; 31 for F2'Address use FA'Address; 32 pragma Import (Ada, F2); 33 34 I1 : Integer := 1234567; 35 IA : Arr; 36 I2 : R_Int; 37 for I2'Address use IA'Address; 38 pragma Import (Ada, I2); 39 40begin 41 -- Check that converting a FP value yields a big-endian array 42 FA := From_Float (F1); 43 if F2.F /= F1 then 44 raise Program_Error; 45 end if; 46 47 -- Check that converting an integer value yields a big-endian array. 48 IA := From_Int (I1); 49 if I2.I /= I1 then 50 raise Program_Error; 51 end if; 52end; 53