-- { dg-do run } with System; with Ada.Unchecked_Conversion; with Ada.Streams; use Ada.Streams; with Ada.Text_IO; procedure SSO1 is type Unsigned_Integer_4 is mod 2 ** 32; for Unsigned_Integer_4'Size use 32; Default_Bit_Order_Pos : constant Natural := System.Bit_Order'Pos (System.Default_Bit_Order); Opposite_Bit_Order_Pos : constant Natural := 1 - Default_Bit_Order_Pos; Opposite_Bit_Order : constant System.Bit_Order := System.Bit_Order'Val (Opposite_Bit_Order_Pos); type Rec is record X, Y : Unsigned_Integer_4; end record; for Rec'Bit_Order use System.Default_Bit_Order; for Rec'Scalar_Storage_Order use System.Default_Bit_Order; for Rec use record X at 0 * 4 range 0 .. 31; Y at 1 * 4 range 0 .. 31; end record; type Nested_Rec is record I : Unsigned_Integer_4; R : Rec; J : Unsigned_Integer_4; end record; for Nested_Rec use record I at 0 * 4 range 0 .. 31; R at 1 * 4 range 0 .. 63; J at 3 * 4 range 0 .. 31; end record; for Nested_Rec'Bit_Order use Opposite_Bit_Order; for Nested_Rec'Scalar_Storage_Order use Opposite_Bit_Order; Nr : Nested_Rec := (I => 1, R => (X => 1, Y => 1), J => 1); subtype Nested_Rec_As_Stream is Ada.Streams.Stream_Element_Array (1 ..16); function To_Stream is new Ada.Unchecked_Conversion (Nested_Rec, Nested_Rec_As_Stream); Nr_Stream : constant Nested_Rec_As_Stream := To_Stream (Nr); Expected : constant array (System.Bit_Order) of Nested_Rec_As_Stream := (System.Low_Order_First => (0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1), System.High_Order_First => (1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0)); begin if Nr_Stream /= Expected (System.Default_Bit_Order) then raise Program_Error; end if; end;