blob: 1b2cd5f17073a59a9ef71213678dc17cd515faa1 [file] [log] [blame]
-- { 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;