[multiple changes]
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
This commit is contained in:
parent
8fdafe44be
commit
00ba7be813
@ -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>
|
2014-01-27 Thomas Quinot <quinot@adacore.com>
|
||||||
|
|
||||||
* exp_ch7.adb: Minor reformatting.
|
* exp_ch7.adb: Minor reformatting.
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
-- --
|
-- --
|
||||||
-- S p e c --
|
-- 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 --
|
-- This specification is derived from the Ada Reference Manual for use with --
|
||||||
-- GNAT. In accordance with the copyright of that document, you can freely --
|
-- 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;
|
Sub_Second : Second_Duration := 0.0) return Day_Duration;
|
||||||
-- Returns a Day_Duration value for the combination of the given Hour,
|
-- 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.
|
-- 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
|
-- 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_
|
-- is equal to the value of Seconds_Of for the next second with a Sub_
|
||||||
-- Second value of 0.0.
|
-- Second value of 0.0.
|
||||||
|
@ -2390,7 +2390,7 @@ package body Ada.Containers.Bounded_Vectors is
|
|||||||
is
|
is
|
||||||
begin
|
begin
|
||||||
if Capacity > Container.Capacity then
|
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 if;
|
||||||
end Reserve_Capacity;
|
end Reserve_Capacity;
|
||||||
|
|
||||||
|
@ -1506,6 +1506,19 @@ package body Ada.Containers.Formal_Vectors is
|
|||||||
end;
|
end;
|
||||||
end Set_Length;
|
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 --
|
-- Swap --
|
||||||
----------
|
----------
|
||||||
|
@ -45,8 +45,9 @@
|
|||||||
-- which is not possible if cursors encapsulate an access to the underlying
|
-- which is not possible if cursors encapsulate an access to the underlying
|
||||||
-- container.
|
-- 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 Left (Container : Vector; Position : Cursor) return Vector;
|
||||||
-- function Right (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;
|
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
|
function Left (Container : Vector; Position : Cursor) return Vector with
|
||||||
Pre => Has_Element (Container, Position) or else Position = No_Element;
|
Pre => Has_Element (Container, Position) or else Position = No_Element;
|
||||||
function Right (Container : Vector; Position : Cursor) return Vector with
|
function Right (Container : Vector; Position : Cursor) return Vector with
|
||||||
|
@ -167,7 +167,7 @@ package body Ada.Containers.Hashed_Maps is
|
|||||||
Target.Reserve_Capacity (Source.Length);
|
Target.Reserve_Capacity (Source.Length);
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
Insert_Items (Target.HT);
|
Insert_Items (Source.HT);
|
||||||
end Assign;
|
end Assign;
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
|
@ -274,7 +274,7 @@ package body Ada.Containers.Ordered_Maps is
|
|||||||
end if;
|
end if;
|
||||||
|
|
||||||
Target.Clear;
|
Target.Clear;
|
||||||
Insert_Items (Target.Tree);
|
Insert_Items (Source.Tree);
|
||||||
end Assign;
|
end Assign;
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
|
@ -3043,6 +3043,16 @@ package body Exp_Ch4 is
|
|||||||
|
|
||||||
-- Local Declarations
|
-- 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;
|
Opnd_Typ : Entity_Id;
|
||||||
Ent : Entity_Id;
|
Ent : Entity_Id;
|
||||||
Len : Uint;
|
Len : Uint;
|
||||||
@ -3571,8 +3581,10 @@ package body Exp_Ch4 is
|
|||||||
|
|
||||||
if Atyp = Standard_String
|
if Atyp = Standard_String
|
||||||
and then NN in 2 .. 9
|
and then NN in 2 .. 9
|
||||||
and then (Opt.Optimization_Level = 0 or else Debug_Flag_Dot_CC)
|
and then (Lib_Level_Target
|
||||||
and then not Debug_Flag_Dot_C
|
or else
|
||||||
|
((Opt.Optimization_Level = 0 or else Debug_Flag_Dot_CC)
|
||||||
|
and then not Debug_Flag_Dot_C))
|
||||||
then
|
then
|
||||||
declare
|
declare
|
||||||
RR : constant array (Nat range 2 .. 9) of RE_Id :=
|
RR : constant array (Nat range 2 .. 9) of RE_Id :=
|
||||||
|
@ -195,7 +195,7 @@ package body Exp_Smem is
|
|||||||
procedure Add_Write_After (N : Node_Id) is
|
procedure Add_Write_After (N : Node_Id) is
|
||||||
Loc : constant Source_Ptr := Sloc (N);
|
Loc : constant Source_Ptr := Sloc (N);
|
||||||
Ent : constant Entity_Id := Entity (N);
|
Ent : constant Entity_Id := Entity (N);
|
||||||
Par : constant Node_Id := Insert_Node;
|
Par : constant Node_Id := Insert_Node;
|
||||||
begin
|
begin
|
||||||
if Present (Shared_Var_Procs_Instance (Ent)) then
|
if Present (Shared_Var_Procs_Instance (Ent)) then
|
||||||
if Nkind (Insert_Node) = N_Function_Call then
|
if Nkind (Insert_Node) = N_Function_Call then
|
||||||
|
@ -1736,6 +1736,19 @@ package body Ch5 is
|
|||||||
elsif Token = Tok_In then
|
elsif Token = Tok_In then
|
||||||
Scan; -- past IN
|
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
|
else
|
||||||
return Error;
|
return Error;
|
||||||
end if;
|
end if;
|
||||||
|
@ -1814,7 +1814,7 @@ package body Sem_Ch5 is
|
|||||||
Set_Etype (Def_Id, Component_Type (Typ));
|
Set_Etype (Def_Id, Component_Type (Typ));
|
||||||
|
|
||||||
if Present (Subt)
|
if Present (Subt)
|
||||||
and then Bas /= Base_Type (Component_Type (Typ))
|
and then Base_Type (Bas) /= Base_Type (Component_Type (Typ))
|
||||||
then
|
then
|
||||||
Error_Msg_N
|
Error_Msg_N
|
||||||
("subtype indication does not match component type", Subt);
|
("subtype indication does not match component type", Subt);
|
||||||
|
@ -1585,17 +1585,20 @@ package body Sem_Res is
|
|||||||
|
|
||||||
-- If in ASIS_Mode, propagate operand types to original actuals of
|
-- If in ASIS_Mode, propagate operand types to original actuals of
|
||||||
-- function call, which would otherwise not be fully resolved. If
|
-- 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 ASIS_Mode and then Nkind (N) in N_Op then
|
||||||
if Is_Binary then
|
if Is_Binary then
|
||||||
Rewrite (First (Parameter_Associations (Original_Node (N))),
|
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)))),
|
Rewrite (Next (First (Parameter_Associations (Original_Node (N)))),
|
||||||
New_Copy_Tree (Right_Opnd (N)));
|
Relocate_Node (Right_Opnd (N)));
|
||||||
else
|
else
|
||||||
Rewrite (First (Parameter_Associations (Original_Node (N))),
|
Rewrite (First (Parameter_Associations (Original_Node (N))),
|
||||||
New_Copy_Tree (Right_Opnd (N)));
|
Relocate_Node (Right_Opnd (N)));
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
Set_Parent (Original_Node (N), Parent (N));
|
Set_Parent (Original_Node (N), Parent (N));
|
||||||
|
@ -2240,7 +2240,19 @@ package body Sem_Util is
|
|||||||
end loop;
|
end loop;
|
||||||
|
|
||||||
if Scope (Nam) = Prot and then Ekind (Nam) /= E_Function then
|
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
|
Error_Msg_N
|
||||||
("within protected function cannot use protected "
|
("within protected function cannot use protected "
|
||||||
& "procedure in renaming or as generic actual", N);
|
& "procedure in renaming or as generic actual", N);
|
||||||
|
Loading…
Reference in New Issue
Block a user