aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2008-08-04 11:49:42 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2008-08-04 11:49:42 +0200
commit9450205a0ccc2f227a24bc6f5c5c8f3d5ab1c710 (patch)
treee7547ada839b13810d2b13de0e3cd99cf78ccffe /gcc
parentc18b3a998d1d0533759a5071d4309a34848a8ea3 (diff)
downloadgcc-9450205a0ccc2f227a24bc6f5c5c8f3d5ab1c710.zip
gcc-9450205a0ccc2f227a24bc6f5c5c8f3d5ab1c710.tar.gz
gcc-9450205a0ccc2f227a24bc6f5c5c8f3d5ab1c710.tar.bz2
exp_ch4.adb (Get_Allocator_Final_List): Freeze anonymous type for chain at once...
2008-08-04 Ed Schonberg <schonberg@adacore.com> * exp_ch4.adb (Get_Allocator_Final_List): Freeze anonymous type for chain at once, to ensure that type is properly decorated for back-end, when allocator appears within a loop. From-SVN: r138597
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/exp_ch4.adb8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index ba09aa6..1bef500 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -977,8 +977,7 @@ package body Exp_Ch4 is
-- not allow sliding, but this check does (a relaxation from Ada 83).
if Is_Constrained (DesigT)
- and then not Subtypes_Statically_Match
- (T, DesigT)
+ and then not Subtypes_Statically_Match (T, DesigT)
then
Apply_Constraint_Check
(Exp, DesigT, No_Sliding => False);
@@ -8354,7 +8353,9 @@ package body Exp_Ch4 is
-- chain. The Final_Chain that is thus created is shared by the
-- access parameter. The access type is tested against the result
-- type of the function to exclude allocators whose type is an
- -- anonymous access result type.
+ -- anonymous access result type. We freeze the type at once to
+ -- ensure that it is properly decorated for the back-end, even
+ -- if the context and current scope is a loop.
if Nkind (Associated_Node_For_Itype (PtrT))
in N_Subprogram_Specification
@@ -8371,6 +8372,7 @@ package body Exp_Ch4 is
Subtype_Indication =>
New_Occurrence_Of (T, Loc))));
+ Freeze_Before (N, Owner);
Build_Final_List (N, Owner);
Set_Associated_Final_Chain (PtrT, Associated_Final_Chain (Owner));