sem_aggr.adb (Resolve_Array_Aggregate): when copying the expression in an association...
authorEd Schonberg <schonberg@adacore.com>
Tue, 2 Aug 2011 15:17:00 +0000 (15:17 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 2 Aug 2011 15:17:00 +0000 (17:17 +0200)
2011-08-02  Ed Schonberg  <schonberg@adacore.com>

* 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
gcc/ada/sem_aggr.adb
gcc/ada/sem_res.adb

index 8777494989c59816d8d5bfa9b26a0402d8c0947f..1d855df2a83a056f8409abd055a2da7e033cb379 100644 (file)
@@ -1,3 +1,10 @@
+2011-08-02  Ed Schonberg  <schonberg@adacore.com>
+
+       * 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  <moy@adacore.com>
 
        * einfo.adb, einfo.ads (Body_Is_In_ALFA, Set_Body_Is_In_ALFA): get/set
index e70458666f71566df7032bac36ff2af02b114d8e..59374c203829df0e6dbf3b2c542df184dd1ea1c8 100644 (file)
@@ -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
index 6ff32af98cc1c72361ce95764cbd150d85a339d7..84f03278de6bc0e1be2e537c63eeee848f79b396 100644 (file)
@@ -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;