2012-03-30 Thomas Quinot <quinot@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Mar 2012 09:11:38 +0000 (09:11 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Mar 2012 09:11:38 +0000 (09:11 +0000)
* freeze.adb (Freeze_Record_Type): For a type with reversed bit
order and reversed storage order, disable front-end relayout.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@185996 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/freeze.adb

index 7b8832d..baeff68 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-30  Thomas Quinot  <quinot@adacore.com>
+
+       * freeze.adb (Freeze_Record_Type): For a type with reversed bit
+       order and reversed storage order, disable front-end relayout.
+
 2012-03-25  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Record_Subtype>: Copy
index fc76000..3eae40e 100644 (file)
@@ -2161,8 +2161,16 @@ package body Freeze is
 
             --  Here is where we do the processing for reversed bit order
 
-            else
+            elsif not Reverse_Storage_Order (Rec) then
                Adjust_Record_For_Reverse_Bit_Order (Rec);
+
+            --  Case where we have both a reverse Bit_Order and a corresponding
+            --  Scalar_Storage_Order: leave record untouched, the back-end
+            --  will take care of required layout conversions.
+
+            else
+               null;
+
             end if;
          end if;