[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 16 Oct 2015 13:41:29 +0000 (15:41 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 16 Oct 2015 13:41:29 +0000 (15:41 +0200)
2015-10-16  Javier Miranda  <miranda@adacore.com>

* sem_ch5.adb (Analyze_Iterator_Specification): Associate a
transient scope with the renaming object declararation.
* exp_util.adb (Insert_Actions): if the enclosing interator
loop is marked as requiring the secondary stack then attach the
actions to the transient scope.

2015-10-16  Bob Duff  <duff@adacore.com>

* exp_ch7.adb: Minor spelling fixes.

2015-10-16  Ed Schonberg  <schonberg@adacore.com>

* sem_ch3.adb (Replace_Anonymous_Access_To_Protected_Subprogram):
If anonymous type is component type of array type declaration,
analyze its declaration in the current scope, not the enclosing
one.

From-SVN: r228906

gcc/ada/ChangeLog
gcc/ada/exp_ch7.adb
gcc/ada/exp_util.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_ch5.adb
gcc/ada/sem_util.adb

index 9c0689623cbb2271de559e8b7bcb0d11b0c8c2ee..d8f2b58a10757a9502582f7dc08b780cdec6934f 100644 (file)
@@ -1,3 +1,22 @@
+2015-10-16  Javier Miranda  <miranda@adacore.com>
+
+       * sem_ch5.adb (Analyze_Iterator_Specification): Associate a
+       transient scope with the renaming object declararation.
+       * exp_util.adb (Insert_Actions): if the enclosing interator
+       loop is marked as requiring the secondary stack then attach the
+       actions to the transient scope.
+
+2015-10-16  Bob Duff  <duff@adacore.com>
+
+       * exp_ch7.adb: Minor spelling fixes.
+
+2015-10-16  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch3.adb (Replace_Anonymous_Access_To_Protected_Subprogram):
+       If anonymous type is component type of array type declaration,
+       analyze its declaration in the current scope, not the enclosing
+       one.
+
 2015-10-16  Gary Dismukes  <dismukes@adacore.com>
 
        * prj.adb, sem_util.adb, exp_ch6.adb: Minor reformatting.
index 2f90c92cbe326f4bbeaf699ad9bd04717b6bedf4..3836e8575ea8b5d29ee2fdd6d7ba861f64ba98d4 100644 (file)
@@ -1109,7 +1109,7 @@ package body Exp_Ch7 is
       Finalizer_Decls : List_Id := No_List;
       --  Local variable declarations. This list holds the label declarations
       --  of all jump block alternatives as well as the declaration of the
-      --  local exception occurence and the raised flag:
+      --  local exception occurrence and the raised flag:
       --     E : Exception_Occurrence;
       --     Raised : Boolean := False;
       --     L<counter value> : label;
@@ -5283,7 +5283,7 @@ package body Exp_Ch7 is
       --                      Abort  : constant Boolean := Triggered_By_Abort;
       --                        <or>
       --                      Abort  : constant Boolean := False; --  no abort
-      --                      E      : Exception_Occurence;
+      --                      E      : Exception_Occurrence;
       --                      Raised : Boolean := False;
 
       --                   begin
@@ -6047,7 +6047,7 @@ package body Exp_Ch7 is
       --             when others =>
       --                if not Raised then
       --                   Raised := True;
-      --                   Save_Occurence (E, Get_Current_Excep.all.all);
+      --                   Save_Occurrence (E, Get_Current_Excep.all.all);
       --                end if;
       --          end;
       --       end if;
@@ -6065,7 +6065,7 @@ package body Exp_Ch7 is
       --       Abort  : constant Boolean := Triggered_By_Abort;
       --         <or>
       --       Abort  : constant Boolean := False;  --  no abort
-      --       E      : Exception_Occurence;
+      --       E      : Exception_Occurrence;
       --       Raised : Boolean := False;
       --
       --    begin
@@ -6076,7 +6076,7 @@ package body Exp_Ch7 is
       --             when others =>
       --                if not Raised then
       --                   Raised := True;
-      --                   Save_Occurence (E, Get_Current_Excep.all.all);
+      --                   Save_Occurrence (E, Get_Current_Excep.all.all);
       --                end if;
       --          end;
       --       end if;
@@ -6100,7 +6100,7 @@ package body Exp_Ch7 is
       --                when others =>
       --                   if not Raised then
       --                      Raised := True;
-      --                      Save_Occurence (E, Get_Current_Excep.all.all);
+      --                      Save_Occurrence (E, Get_Current_Excep.all.all);
       --                   end if;
       --             end;
       --             .  .  .
@@ -6111,7 +6111,7 @@ package body Exp_Ch7 is
       --                when others =>
       --                   if not Raised then
       --                      Raised := True;
-      --                      Save_Occurence (E, Get_Current_Excep.all.all);
+      --                      Save_Occurrence (E, Get_Current_Excep.all.all);
       --                   end if;
       --             end;
       --             <<L0>>
@@ -6533,7 +6533,7 @@ package body Exp_Ch7 is
          --         <or>
          --       Abort  : constant Boolean := False;  --  no abort
 
-         --       E      : Exception_Occurence;
+         --       E      : Exception_Occurrence;
          --       Raised : Boolean := False;
 
          --    begin
@@ -7105,7 +7105,7 @@ package body Exp_Ch7 is
          --         <or>
          --       Abort  : constant Boolean := False;  --  no abort
 
-         --       E      : Exception_Occurence;
+         --       E      : Exception_Occurrence;
          --       Raised : Boolean := False;
 
          --    begin
index fb0d487ef382d8f249d75017139c00beaacaff76..56f9b9a043bde93ca125a0ecd6c1306650c4279e 100644 (file)
@@ -4034,6 +4034,22 @@ package body Exp_Util is
                   end if;
 
                   return;
+
+               --  Iteration scheme located in a transient scope
+
+               elsif Nkind (P) = N_Iteration_Scheme
+                 and then Present (Wrapped_Node)
+               then
+                  --  If the enclosing iterator loop is marked as requiring the
+                  --  secondary stack then the actions must be inserted in the
+                  --  transient scope.
+
+                  if Uses_Sec_Stack
+                       (Find_Enclosing_Iterator_Loop (Current_Scope))
+                  then
+                     Store_Before_Actions_In_Scope (Ins_Actions);
+                     return;
+                  end if;
                end if;
 
             --  Statements, declarations, pragmas, representation clauses
index f21edeb057e1ad96a26cc769045e5aaa25f67c94..542ea3f9c1d0588ab23f3218abba589ad13ded8f 100644 (file)
@@ -5913,7 +5913,13 @@ package body Sem_Ch3 is
 
       Mark_Rewrite_Insertion (Comp);
 
-      if Nkind_In (N, N_Object_Declaration, N_Access_Function_Definition) then
+      if Nkind_In (N, N_Object_Declaration, N_Access_Function_Definition)
+        or else (Nkind (Parent (N)) = N_Full_Type_Declaration
+                  and then not Is_Type (Current_Scope))
+      then
+
+         --  Declaration can be analyzed in the current scope.
+
          Analyze (Decl);
 
       else
index d2d5f25f3f3eef3269986ab9198e6ff27b7e602a..234317c0f1dc5063ee29b14fd39236340ac7bec8 100644 (file)
@@ -30,6 +30,7 @@ with Einfo;    use Einfo;
 with Errout;   use Errout;
 with Expander; use Expander;
 with Exp_Ch6;  use Exp_Ch6;
+with Exp_Ch7;  use Exp_Ch7;
 with Exp_Util; use Exp_Util;
 with Freeze;   use Freeze;
 with Ghost;    use Ghost;
@@ -1959,6 +1960,16 @@ package body Sem_Ch5 is
                 Name                =>
                   New_Copy_Tree (Iter_Name, New_Sloc => Loc));
 
+            --  Create a transient scope to ensure that all the temporaries
+            --  generated by Remove_Side_Effects as part of processing this
+            --  renaming declaration (if any) are attached by Insert_Actions
+            --  to it. It has no effect on the generated code if no actions
+            --  are added to it (see Wrap_Transient_Declaration).
+
+            if Expander_Active then
+               Establish_Transient_Scope (Name (Decl), Sec_Stack => True);
+            end if;
+
             Insert_Actions (Parent (Parent (N)), New_List (Decl));
             Rewrite (Name (N), New_Occurrence_Of (Id, Loc));
             Set_Etype (Id, Typ);
index 214ec62ad7ff809813f9010ceff8a650a448d818..2fa6253df374137b4d56d3a6f1961a1055555c0d 100644 (file)
@@ -2346,9 +2346,9 @@ package body Sem_Util is
          return Id;
       end Get_Function_Id;
 
-      ---------------------------
-      -- Preanalyze_Expression --
-      ---------------------------
+      -------------------------------
+      -- Preanalyze_Without_Errors --
+      -------------------------------
 
       procedure Preanalyze_Without_Errors (N : Node_Id) is
          Status : constant Boolean := Get_Ignore_Errors;