From 6ff6152d5046cab8da2873eb3a95bd85b7074194 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Tue, 2 Aug 2011 15:17:00 +0000 Subject: [PATCH] sem_aggr.adb (Resolve_Array_Aggregate): when copying the expression in an association... 2011-08-02 Ed Schonberg * sem_aggr.adb (Resolve_Array_Aggregate): when copying the expression in an association, set parent field of copy before partial analysis. * sem_res.adb (Resolve_Slice): create reference to itype only when expansion is enabled. From-SVN: r177178 --- gcc/ada/ChangeLog | 7 +++++++ gcc/ada/sem_aggr.adb | 5 +++++ gcc/ada/sem_res.adb | 5 +++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 8777494989c..1d855df2a83 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2011-08-02 Ed Schonberg + + * sem_aggr.adb (Resolve_Array_Aggregate): when copying the expression + in an association, set parent field of copy before partial analysis. + * sem_res.adb (Resolve_Slice): create reference to itype only when + expansion is enabled. + 2011-08-02 Yannick Moy * einfo.adb, einfo.ads (Body_Is_In_ALFA, Set_Body_Is_In_ALFA): get/set diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index e70458666f7..59374c20382 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -1974,6 +1974,11 @@ package body Sem_Aggr is begin Expander_Mode_Save_And_Set (False); Full_Analysis := False; + + -- Analyze the expression, making sure it is properly + -- attached to the tree before we do the analysis. + + Set_Parent (Expr, Parent (Expression (Assoc))); Analyze (Expr); -- If the expression is a literal, propagate this info diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb index 6ff32af98cc..84f03278de6 100644 --- a/gcc/ada/sem_res.adb +++ b/gcc/ada/sem_res.adb @@ -9817,9 +9817,10 @@ package body Sem_Res is -- so that the itype is frozen at the proper place in the tree (i.e. at -- the point where actions for the slice are analyzed). Note that this -- is different from freezing the itype immediately, which might be - -- premature (e.g. if the slice is within a transient scope). + -- premature (e.g. if the slice is within a transient scope). This needs + -- to be done only if expansion is enabled. - else + elsif Expander_Active then Ensure_Defined (Typ => Slice_Subtype, N => N); end if; end Set_Slice_Subtype; -- 2.30.2