[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 27 Jan 2014 16:43:29 +0000 (17:43 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 27 Jan 2014 16:43:29 +0000 (17:43 +0100)
2014-01-27  Robert Dewar  <dewar@adacore.com>

* exp_smem.adb: Minor reformatting.

2014-01-27  Thomas Quinot  <quinot@adacore.com>

* a-calfor.ads: Fix incorrect reference to operator "-" in comment.

2014-01-27  Ed Schonberg  <schonberg@adacore.com>

* sem_res.adb (Make_Call_Into_Operator): In ASIS mode, relocate
nodes for operands to the original node for the call, to preserve
Original_Node pointers within the resolved operands, given that
they may have been rewritten as well. Previous approach copied
the operands into a new tree and lost those pointers.

2014-01-27  Claire Dross  <dross@adacore.com>

* a-cofove.adb, a-cofove.ads: Add Strict_Equal function to the API.

2014-01-27  Ed Schonberg  <schonberg@adacore.com>

* sem_util.adb (Check_Internal_Protected_Use): A call through
an anonymous access parameter of the current protected function
is not a potential modification of the current object.

2014-01-27  Ed Schonberg  <schonberg@adacore.com>

* a-cobove.adb (Reserve_Capacity): Procedure raises
Capacity_Error, not Constraint_Error, when request cannot be
satisfied.

2014-01-27  Vincent Celier  <celier@adacore.com>

* a-coorma.adb, a-cohama.adb (Assign): Copy the Source to the Target,
not the Target to itself.

2014-01-27  Ed Schonberg  <schonberg@adacore.com>

* exp_ch4.adb (Expand_Concatenate): If the target of the
concatenation is a library-level entity, always use the off-line
version of concatenation, regardless of optimization level. This
is space-efficient, and prevents linking problems when some
units are compiled with different optimization levels.

2014-01-27  Ed Schonberg  <schonberg@adacore.com>

* sem_ch5.adb: Code clean up.

2014-01-27  Ed Schonberg  <schonberg@adacore.com>

* par-ch5.adb (P_Iterator_Specification): Improve error recovery
when an array or container iterator includes a subtype indication,
which is only legal in an element iterator.

From-SVN: r207141

13 files changed:
gcc/ada/ChangeLog
gcc/ada/a-calfor.ads
gcc/ada/a-cobove.adb
gcc/ada/a-cofove.adb
gcc/ada/a-cofove.ads
gcc/ada/a-cohama.adb
gcc/ada/a-coorma.adb
gcc/ada/exp_ch4.adb
gcc/ada/exp_smem.adb
gcc/ada/par-ch5.adb
gcc/ada/sem_ch5.adb
gcc/ada/sem_res.adb
gcc/ada/sem_util.adb

index f50f691..fc60f65 100644 (file)
@@ -1,3 +1,59 @@
+2014-01-27  Robert Dewar  <dewar@adacore.com>
+
+       * exp_smem.adb: Minor reformatting.
+
+2014-01-27  Thomas Quinot  <quinot@adacore.com>
+
+       * a-calfor.ads: Fix incorrect reference to operator "-" in comment.
+
+2014-01-27  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_res.adb (Make_Call_Into_Operator): In ASIS mode, relocate
+       nodes for operands to the original node for the call, to preserve
+       Original_Node pointers within the resolved operands, given that
+       they may have been rewritten as well. Previous approach copied
+       the operands into a new tree and lost those pointers.
+
+2014-01-27  Claire Dross  <dross@adacore.com>
+
+
+       * a-cofove.adb, a-cofove.ads: Add Strict_Equal function to the API.
+
+2014-01-27  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_util.adb (Check_Internal_Protected_Use): A call through
+       an anonymous access parameter of the current protected function
+       is not a potential modification of the current object.
+
+2014-01-27  Ed Schonberg  <schonberg@adacore.com>
+
+       * a-cobove.adb (Reserve_Capacity): Procedure raises
+       Capacity_Error, not Constraint_Error, when request cannot be
+       satisfied.
+
+2014-01-27  Vincent Celier  <celier@adacore.com>
+
+       * a-coorma.adb, a-cohama.adb (Assign): Copy the Source to the Target,
+       not the Target to itself.
+
+2014-01-27  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_ch4.adb (Expand_Concatenate): If the target of the
+       concatenation is a library-level entity, always use the off-line
+       version of concatenation, regardless of optimization level. This
+       is space-efficient, and prevents linking problems when some
+       units are compiled with different optimization levels.
+
+2014-01-27  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch5.adb: Code clean up.
+
+2014-01-27  Ed Schonberg  <schonberg@adacore.com>
+
+       * par-ch5.adb (P_Iterator_Specification): Improve error recovery
+       when an array or container iterator includes a subtype indication,
+       which is only legal in an element iterator.
+
 2014-01-27  Thomas Quinot  <quinot@adacore.com>
 
        * exp_ch7.adb: Minor reformatting.
index d5cc934..8cfd6a4 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---         Copyright (C) 2005-2008, Free Software Foundation, Inc.          --
+--         Copyright (C) 2005-2013, Free Software Foundation, Inc.          --
 --                                                                          --
 -- This specification is derived from the Ada Reference Manual for use with --
 -- GNAT.  In accordance with the copyright of that document, you can freely --
@@ -70,7 +70,7 @@ package Ada.Calendar.Formatting is
       Sub_Second : Second_Duration := 0.0) return Day_Duration;
    --  Returns a Day_Duration value for the combination of the given Hour,
    --  Minute, Second, and Sub_Second. This value can be used in Ada.Calendar.
-   --  Time_Of as well as the argument to Calendar."+" and Calendar."". If
+   --  Time_Of as well as the argument to Calendar."+" and Calendar."-". If
    --  Seconds_Of is called with a Sub_Second value of 1.0, the value returned
    --  is equal to the value of Seconds_Of for the next second with a Sub_
    --  Second value of 0.0.
index bcd6118..b2e75b5 100644 (file)
@@ -2390,7 +2390,7 @@ package body Ada.Containers.Bounded_Vectors is
    is
    begin
       if Capacity > Container.Capacity then
-         raise Constraint_Error with "Capacity is out of range";
+         raise Capacity_Error with "Capacity is out of range";
       end if;
    end Reserve_Capacity;
 
index 240715d..6789f71 100644 (file)
@@ -1506,6 +1506,19 @@ package body Ada.Containers.Formal_Vectors is
       end;
    end Set_Length;
 
+   ------------------
+   -- Strict_Equal --
+   ------------------
+
+   function Strict_Equal (Left, Right : Vector) return Boolean is
+   begin
+      --  On bounded vectors, cursors are indexes. As a consequence, two
+      --  vectors always have the same cursor at the same position and
+      --  Strict_Equal is simply =
+
+      return Left = Right;
+   end Strict_Equal;
+
    ----------
    -- Swap --
    ----------
index 1f9b94f..2c451fb 100644 (file)
@@ -45,8 +45,9 @@
 --    which is not possible if cursors encapsulate an access to the underlying
 --    container.
 
---    There are two new functions:
+--    There are three new functions:
 
+--      function Strict_Equal (Left, Right : Vector) return Boolean;
 --      function Left  (Container : Vector; Position : Cursor) return Vector;
 --      function Right (Container : Vector; Position : Cursor) return Vector;
 
@@ -349,6 +350,11 @@ package Ada.Containers.Formal_Vectors is
 
    end Generic_Sorting;
 
+   function Strict_Equal (Left, Right : Vector) return Boolean;
+   --  Strict_Equal returns True if the containers are physically equal, i.e.
+   --  they are structurally equal (function "=" returns True) and that they
+   --  have the same set of cursors.
+
    function Left (Container : Vector; Position : Cursor) return Vector with
      Pre => Has_Element (Container, Position) or else Position = No_Element;
    function Right (Container : Vector; Position : Cursor) return Vector with
index 6af16ee..0616f43 100644 (file)
@@ -167,7 +167,7 @@ package body Ada.Containers.Hashed_Maps is
          Target.Reserve_Capacity (Source.Length);
       end if;
 
-      Insert_Items (Target.HT);
+      Insert_Items (Source.HT);
    end Assign;
 
    --------------
index 52025bb..e451ec6 100644 (file)
@@ -274,7 +274,7 @@ package body Ada.Containers.Ordered_Maps is
       end if;
 
       Target.Clear;
-      Insert_Items (Target.Tree);
+      Insert_Items (Source.Tree);
    end Assign;
 
    -------------
index 97368c0..d0288b2 100644 (file)
@@ -3043,6 +3043,16 @@ package body Exp_Ch4 is
 
       --  Local Declarations
 
+      Lib_Level_Target : constant Boolean :=
+        Nkind (Parent (Cnode)) = N_Object_Declaration
+          and then
+            Is_Library_Level_Entity (Defining_Identifier (Parent (Cnode)));
+
+      --  If the concatenation declares a library level entity, we call the
+      --  built-in concatenation routines to prevent code bloat, regardless
+      --  of optimization level. This is space-efficient, and prevent linking
+      --  problems when units are compiled with different optimizations.
+
       Opnd_Typ : Entity_Id;
       Ent      : Entity_Id;
       Len      : Uint;
@@ -3571,8 +3581,10 @@ package body Exp_Ch4 is
 
       if Atyp = Standard_String
         and then NN in 2 .. 9
-        and then (Opt.Optimization_Level = 0 or else Debug_Flag_Dot_CC)
-        and then not Debug_Flag_Dot_C
+        and then (Lib_Level_Target
+          or else
+            ((Opt.Optimization_Level = 0 or else Debug_Flag_Dot_CC)
+               and then not Debug_Flag_Dot_C))
       then
          declare
             RR : constant array (Nat range 2 .. 9) of RE_Id :=
index 7fb40c4..8ee6702 100644 (file)
@@ -195,7 +195,7 @@ package body Exp_Smem is
    procedure Add_Write_After (N : Node_Id) is
       Loc : constant Source_Ptr := Sloc (N);
       Ent : constant Entity_Id  := Entity (N);
-      Par : constant Node_Id := Insert_Node;
+      Par : constant Node_Id    := Insert_Node;
    begin
       if Present (Shared_Var_Procs_Instance (Ent)) then
          if Nkind (Insert_Node) = N_Function_Call then
index 8992f15..bf28e23 100644 (file)
@@ -1736,6 +1736,19 @@ package body Ch5 is
       elsif Token = Tok_In then
          Scan;  --  past IN
 
+      elsif Prev_Token = Tok_In
+        and then Present (Subtype_Indication (Node1))
+      then
+
+         --  Simplest recovery is to transform it into an element iterator.
+         --  Error message on 'in" has already been emitted when parsing the
+         --  optional constraint.
+
+         Set_Of_Present (Node1);
+         Error_Msg_N
+           ("subtype indication is only legal on on element iterator",
+              Subtype_Indication (Node1));
+
       else
          return Error;
       end if;
index 581edf4..590d8ab 100644 (file)
@@ -1814,7 +1814,7 @@ package body Sem_Ch5 is
             Set_Etype (Def_Id, Component_Type (Typ));
 
             if Present (Subt)
-              and then Bas /= Base_Type (Component_Type (Typ))
+              and then Base_Type (Bas) /= Base_Type (Component_Type (Typ))
             then
                Error_Msg_N
                  ("subtype indication does not match component type", Subt);
index 59986f5..7e2e55c 100644 (file)
@@ -1585,17 +1585,20 @@ package body Sem_Res is
 
       --  If in ASIS_Mode, propagate operand types to original actuals of
       --  function call, which would otherwise not be fully resolved. If
-      --  the call has already been constant-folded, nothing to do.
+      --  the call has already been constant-folded, nothing to do. We
+      --  relocate the operand nodes rather than copy them, to preserve
+      --  original_node pointers, given that the operands themselves may
+      --  have been rewritten.
 
       if ASIS_Mode and then Nkind (N) in N_Op then
          if Is_Binary then
             Rewrite (First (Parameter_Associations (Original_Node (N))),
-               New_Copy_Tree (Left_Opnd (N)));
+               Relocate_Node (Left_Opnd (N)));
             Rewrite (Next (First (Parameter_Associations (Original_Node (N)))),
-               New_Copy_Tree (Right_Opnd (N)));
+               Relocate_Node (Right_Opnd (N)));
          else
             Rewrite (First (Parameter_Associations (Original_Node (N))),
-               New_Copy_Tree (Right_Opnd (N)));
+               Relocate_Node (Right_Opnd (N)));
          end if;
 
          Set_Parent (Original_Node (N), Parent (N));
index d41eb3a..284872b 100644 (file)
@@ -2240,7 +2240,19 @@ package body Sem_Util is
       end loop;
 
       if Scope (Nam) = Prot and then Ekind (Nam) /= E_Function then
-         if Nkind (N) = N_Subprogram_Renaming_Declaration then
+
+         --  An indirect function call (e.g. a callback within a protected
+         --  function body) is not statically illegal. If the access type is
+         --  anonymous and is the type of an access parameter, the scope of Nam
+         --  will be the protected type, but it is not a protected operation.
+
+         if Ekind (Nam) = E_Subprogram_Type
+           and then
+             Nkind (Associated_Node_For_Itype (Nam)) = N_Function_Specification
+         then
+            null;
+
+         elsif Nkind (N) = N_Subprogram_Renaming_Declaration then
             Error_Msg_N
               ("within protected function cannot use protected "
                & "procedure in renaming or as generic actual", N);