aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRobert Dewar <dewar@adacore.com>2007-12-19 17:23:43 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2007-12-19 17:23:43 +0100
commite5aa8dd31e0abac5dcfb3da086ff8a5316ea3fc0 (patch)
tree1f9d26f8d01a49005172f67ef1d1fad10e607a33 /gcc
parent6625fbd0cba10d07e017a1bb3c62775481f56fd6 (diff)
downloadgcc-e5aa8dd31e0abac5dcfb3da086ff8a5316ea3fc0.zip
gcc-e5aa8dd31e0abac5dcfb3da086ff8a5316ea3fc0.tar.gz
gcc-e5aa8dd31e0abac5dcfb3da086ff8a5316ea3fc0.tar.bz2
exp_pakd.adb (Expand_Bit_Packed_Element_Set): Fix packed array type in complex case where array is Volatile.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/exp_pakd.adb16
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb
index 9a753de..f3ead19 100644
--- a/gcc/ada/exp_pakd.adb
+++ b/gcc/ada/exp_pakd.adb
@@ -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"