1-- { dg-do run } 2 3with System, Ada.Unchecked_Conversion; use System; 4 5procedure BLKextract_From_Reg is 6 7 type Byte is range 0 .. +255; 8 for Byte'size use 8; 9 10 type RGB is array (1 .. 3) of Byte; 11 for RGB'Size use 24; 12 13 type RAW_Packet is range 0 .. 2 ** 32 - 1; 14 for RAW_Packet'Size use 32; 15 16 type Composite_Packet is record 17 Values : RGB; 18 Pad : Byte; 19 end record; 20 for Composite_Packet use record 21 Values at 0 range 0 .. 23; 22 Pad at 3 range 0 .. 7; 23 end record; 24 for Composite_Packet'Size use 32; 25 26 function To_Composite_Packet is 27 new Ada.Unchecked_Conversion (RAW_Packet, Composite_Packet); 28 29 function Blob return RGB is 30 RAW_Blob : RAW_Packet := 16#01020304#; 31 begin 32 return To_Composite_Packet (RAW_Blob).Values; 33 end; 34 35 Blob_Color : RGB := Blob; 36 Expected_Color : RGB; 37begin 38 if System.Default_Bit_Order = High_Order_First then 39 Expected_Color := (1 => 1, 2 => 2, 3 => 3); 40 else 41 Expected_Color := (1 => 4, 2 => 3, 3 => 2); 42 end if; 43 44 for I in Blob_Color'Range loop 45 if Blob_Color (I) /= Expected_Color (I) then 46 raise Program_Error; 47 end if; 48 end loop; 49end; 50