[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 11 Oct 2010 10:07:06 +0000 (12:07 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 11 Oct 2010 10:07:06 +0000 (12:07 +0200)
2010-10-11  Arnaud Charlet  <charlet@adacore.com>

* sem_ch3.adb, exp_ch6.adb
(Make_Build_In_Place_Call_In_Anonymous_Context,
Make_Build_In_Place_Call_In_Assignment,
Make_Build_In_Place_Call_In_Object_Declaration): Fix calls to
Add_Task_Actuals_To_Build_In_Place_Call in case of No_Task_Hierarchy
restriction.
(Access_Definition): Add missing handling of No_Task_Hierarchy.

2010-10-11  Javier Miranda  <miranda@adacore.com>

* exp_util.adb (Remove_Side_Effects): No action needed for renamings of
class-wide expressions.

From-SVN: r165293

gcc/ada/ChangeLog
gcc/ada/exp_ch6.adb
gcc/ada/exp_util.adb
gcc/ada/sem_ch3.adb

index 9fca74b..6401df7 100644 (file)
@@ -1,5 +1,20 @@
 2010-10-11  Arnaud Charlet  <charlet@adacore.com>
 
+       * sem_ch3.adb, exp_ch6.adb
+       (Make_Build_In_Place_Call_In_Anonymous_Context,
+       Make_Build_In_Place_Call_In_Assignment,
+       Make_Build_In_Place_Call_In_Object_Declaration): Fix calls to
+       Add_Task_Actuals_To_Build_In_Place_Call in case of No_Task_Hierarchy
+       restriction.
+       (Access_Definition): Add missing handling of No_Task_Hierarchy.
+
+2010-10-11  Javier Miranda  <miranda@adacore.com>
+
+       * exp_util.adb (Remove_Side_Effects): No action needed for renamings of
+       class-wide expressions.
+
+2010-10-11  Arnaud Charlet  <charlet@adacore.com>
+
        * xr_tabls.adb, sem_res.adb: Minor reformatting
 
 2010-10-11  Arnaud Charlet  <charlet@adacore.com>
index 37df0d5..bd36580 100644 (file)
@@ -475,8 +475,8 @@ package body Exp_Ch6 is
       Master_Actual : Node_Id)
       --  Note: Master_Actual can be Empty, but only if there are no tasks
    is
-      Loc               : constant Source_Ptr := Sloc (Function_Call);
-
+      Loc    : constant Source_Ptr := Sloc (Function_Call);
+      Actual : Node_Id := Master_Actual;
    begin
       --  No such extra parameters are needed if there are no tasks
 
@@ -484,6 +484,12 @@ package body Exp_Ch6 is
          return;
       end if;
 
+      --  Use a dummy _master actual in case of No_Task_Hierarchy
+
+      if Restriction_Active (No_Task_Hierarchy) then
+         Actual := New_Occurrence_Of (RTE (RE_Library_Task_Level), Loc);
+      end if;
+
       --  The master
 
       declare
@@ -493,13 +499,13 @@ package body Exp_Ch6 is
 
          Master_Formal := Build_In_Place_Formal (Function_Id, BIP_Master);
 
-         Analyze_And_Resolve (Master_Actual, Etype (Master_Formal));
+         Analyze_And_Resolve (Actual, Etype (Master_Formal));
 
          --  Build the parameter association for the new actual and add it to
          --  the end of the function's actuals.
 
          Add_Extra_Actual_To_Call
-           (Function_Call, Master_Formal, Master_Actual);
+           (Function_Call, Master_Formal, Actual);
       end;
 
       --  The activation chain
index fc2bb69..980f0f6 100644 (file)
@@ -4839,6 +4839,17 @@ package body Exp_Util is
          return;
       end if;
 
+      --  No action needed for renamings of class-wide expressions because for
+      --  class-wide types Remove_Side_Effects uses a renaming to capture the
+      --  expression (and hence we would generate a never-ending loop in the
+      --  frontend).
+
+      if Is_Class_Wide_Type (Exp_Type)
+         and then Nkind (Parent (Exp)) = N_Object_Renaming_Declaration
+      then
+         return;
+      end if;
+
       --  All this must not have any checks
 
       Scope_Suppress := (others => True);
index 3320c14..29f28b0 100644 (file)
@@ -884,6 +884,7 @@ package body Sem_Ch3 is
 
          elsif Has_Task (Desig_Type)
            and then Comes_From_Source (Related_Nod)
+           and then not Restriction_Active (No_Task_Hierarchy)
          then
             if not Has_Master_Entity (Current_Scope) then
                Decl :=