exp_pakd.adb (Expand_Bit_Packed_Element_Set): Fix packed array type in complex case...
authorRobert Dewar <dewar@adacore.com>
Wed, 19 Dec 2007 16:23:43 +0000 (17:23 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 19 Dec 2007 16:23:43 +0000 (17:23 +0100)
2007-12-19  Robert Dewar  <dewar@adacore.com>

* exp_pakd.adb (Expand_Bit_Packed_Element_Set): Fix packed array type
in complex case where array is Volatile.

From-SVN: r131075

gcc/ada/exp_pakd.adb

index 9a753def1469a55ff24cfa99768d22a4eab0eaba..f3ead191c965b80f0c05a2e900f6d437d0e72b7d 100644 (file)
@@ -1430,8 +1430,20 @@ package body Exp_Pakd is
             end if;
          end if;
 
-         New_Lhs := Duplicate_Subexpr (Obj, True);
-         New_Rhs := Duplicate_Subexpr_No_Checks (Obj);
+         --  Now create copies removing side effects. Note that in some
+         --  complex cases, this may cause the fact that we have already
+         --  set a packed array type on Obj to get lost. So we save the
+         --  type of Obj, and make sure it is reset properly.
+
+         declare
+            T : constant Entity_Id := Etype (Obj);
+         begin
+            New_Lhs := Duplicate_Subexpr (Obj, True);
+            New_Rhs := Duplicate_Subexpr_No_Checks (Obj);
+            Set_Etype (Obj, T);
+            Set_Etype (New_Lhs, T);
+            Set_Etype (New_Rhs, T);
+         end;
 
          --  First we deal with the "and"