summaryrefslogtreecommitdiff
path: root/gcc/ada/exp_ch8.adb
diff options
context:
space:
mode:
authorbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-12 01:11:33 +0000
committerbosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4>2001-10-12 01:11:33 +0000
commit0a4515ae8f63c6bea75dc51260a0cae5fb06a2be (patch)
tree02db8b5033ed15f2f8fff1feae8780c5ff581f92 /gcc/ada/exp_ch8.adb
parentf7e9791234f89908bf6a7fba3d0482b74f379b0b (diff)
downloadgcc-0a4515ae8f63c6bea75dc51260a0cae5fb06a2be.tar.gz
* exp_ch8.adb (Expand_N_Object_Renaming_Declaration): Bugfix in
renaming of discriminant for mutable record type. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46222 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/exp_ch8.adb')
-rw-r--r--gcc/ada/exp_ch8.adb19
1 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ada/exp_ch8.adb b/gcc/ada/exp_ch8.adb
index 54b113300e3..e59b17fdff5 100644
--- a/gcc/ada/exp_ch8.adb
+++ b/gcc/ada/exp_ch8.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- $Revision: 1.27 $
+-- $Revision$
-- --
-- Copyright (C) 1992-2001 Free Software Foundation, Inc. --
-- --
@@ -67,6 +67,16 @@ package body Exp_Ch8 is
-- to the object will be handled by macro substitution in the front
-- end, and the back end will know to ignore the renaming declaration.
+ -- An additional odd case that requires processing by expansion is
+ -- the renaming of a discriminant of a mutable record type. The object
+ -- is a constant because it renames something that cannot be assigned to,
+ -- but in fact the underlying value can change and must be reevaluated
+ -- at each reference. Gigi does have a notion of a "constant view" of
+ -- an object, and therefore the front-end must perform the expansion.
+ -- For simplicity, and to bypass some obscure code-generation problem,
+ -- we use macro substitution for all renamed discriminants, whether the
+ -- enclosing type is constrained or not.
+
-- The other special processing required is for the case of renaming
-- of an object of a class wide type, where it is necessary to build
-- the appropriate subtype for the renamed object.
@@ -203,6 +213,13 @@ package body Exp_Ch8 is
elsif Nkind (Nam) = N_Selected_Component then
if Present (Component_Clause (Entity (Selector_Name (Nam)))) then
return True;
+
+ elsif Ekind (Entity (Selector_Name (Nam))) = E_Discriminant
+ and then Is_Record_Type (Etype (Prefix (Nam)))
+ and then not Is_Concurrent_Record_Type (Etype (Prefix (Nam)))
+ then
+ return True;
+
else
return Evaluation_Required (Prefix (Nam));
end if;