This change ensures that partitions in a DSA application always use a
64 bit representation when exchanging data of type Stream_Element_Offset or
Storage_Offset, to avoid interoperability issues between 32- and 64-bit hosts.

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

2011-08-31  Thomas Quinot  <qui...@adacore.com>

        * rtsfind.ads, exp_dist.adb (Find_Numeric_Representation): Predefined
        types Stream_Element_Offset and Storage_Offset have a different native
        type depending on whether the platform is 32 or 64 bits. When
        exchanging them, always convert to 64 bits.

Index: rtsfind.ads
===================================================================
--- rtsfind.ads (revision 178371)
+++ rtsfind.ads (working copy)
@@ -555,6 +555,7 @@
 
      RE_Root_Stream_Type,                -- Ada.Streams
      RE_Stream_Element,                  -- Ada.Streams
+     RE_Stream_Element_Offset,           -- Ada.Streams
 
      RE_Stream_Access,                   -- Ada.Streams.Stream_IO
 
@@ -1748,6 +1749,7 @@
 
      RE_Root_Stream_Type                 => Ada_Streams,
      RE_Stream_Element                   => Ada_Streams,
+     RE_Stream_Element_Offset            => Ada_Streams,
 
      RE_Stream_Access                    => Ada_Streams_Stream_IO,
 
Index: exp_dist.adb
===================================================================
--- exp_dist.adb        (revision 178358)
+++ exp_dist.adb        (working copy)
@@ -10842,6 +10842,15 @@
             P_Size : constant Uint      := Esize (FST);
 
          begin
+            --  Special case: for Stream_Element_Offset and Storage_Offset,
+            --  always force transmission as a 64-bit value.
+
+            if Is_RTE (FST, RE_Stream_Element_Offset)
+                 or else Is_RTE (FST, RE_Storage_Offset)
+            then
+               return RTE (RE_Unsigned_64);
+            end if;
+
             if Is_Unsigned_Type (Typ) then
                if P_Size <= 8 then
                   return RTE (RE_Unsigned_8);

Reply via email to