diff options
author | bosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-10-12 01:11:33 +0000 |
---|---|---|
committer | bosch <bosch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-10-12 01:11:33 +0000 |
commit | 0a4515ae8f63c6bea75dc51260a0cae5fb06a2be (patch) | |
tree | 02db8b5033ed15f2f8fff1feae8780c5ff581f92 | |
parent | f7e9791234f89908bf6a7fba3d0482b74f379b0b (diff) | |
download | gcc-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
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/exp_ch8.adb | 19 |
2 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 50734bbd4d2..be4689941d9 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2001-10-11 Ed Schonberg <schonber@gnat.com> + + * exp_ch8.adb (Expand_N_Object_Renaming_Declaration): Bugfix in + renaming of discriminant for mutable record type. + 2001-10-11 Robert Dewar <dewar@gnat.com> * validsw.adb: Properly save -gnatVn status. 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; |