This documents the implementation choice made for byte-packed array
types, where we let the code generator deal with them if the type is
composite and use the manipulation routines of the front-end if the
type is discrete.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

        * freeze.adb (Freeze_Array_Type): Add comment on implementation
        choice for byte-packed array types.
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -2928,7 +2928,10 @@ package body Freeze is
 
                      --  Bit packing is not needed for multiples of the storage
                      --  unit if the type is composite because the back end can
-                     --  byte pack composite types.
+                     --  byte pack composite types efficiently. That's not true
+                     --  for discrete types because every read would generate a
+                     --  lot of instructions, so we keep using the manipulation
+                     --  routines of the runtime for them.
 
                      elsif Csiz mod System_Storage_Unit = 0
                        and then Is_Composite_Type (Ctyp)


Reply via email to