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