Commit 05dbd302 by Arnaud Charlet

[multiple changes]

2011-08-01  Javier Miranda  <miranda@adacore.com>

	* sem_disp.adb (Override_Dispatching_Operation): Enforce strictness of
	condition that detects if the overridden operation must replace an
	existing entity.

2011-08-01  Javier Miranda  <miranda@adacore.com>

	* exp_ch4.adb (Expand_N_Case_Expression): Propagate to the expanded
	code declarations inserted by Insert_Actions in each alternative of the
	N_Case_Expression node.

2011-08-01  Robert Dewar  <dewar@adacore.com>

	* sem_ch6.adb: Minor code reorganization.
	* sem_util.adb: Minor reformatting.

From-SVN: r177059
parent af9e051f
2011-08-01 Javier Miranda <miranda@adacore.com>
* sem_disp.adb (Override_Dispatching_Operation): Enforce strictness of
condition that detects if the overridden operation must replace an
existing entity.
2011-08-01 Javier Miranda <miranda@adacore.com>
* exp_ch4.adb (Expand_N_Case_Expression): Propagate to the expanded
code declarations inserted by Insert_Actions in each alternative of the
N_Case_Expression node.
2011-08-01 Robert Dewar <dewar@adacore.com>
* sem_ch6.adb: Minor code reorganization.
* sem_util.adb: Minor reformatting.
2011-08-01 Pascal Obry <obry@adacore.com>
* prj-env.adb: Remove <prefix>/lib/gpr/<target> project search path.
......
......@@ -4018,6 +4018,11 @@ package body Exp_Ch4 is
Aloc : constant Source_Ptr := Sloc (Aexp);
begin
-- Propagate declarations inserted in the node by Insert_Actions
-- (for example, temporaries generated to remove side effects).
Append_List_To (Actions, Sinfo.Actions (Alt));
if not Is_Scalar_Type (Typ) then
Aexp :=
Make_Attribute_Reference (Aloc,
......
......@@ -1855,7 +1855,7 @@ package body Sem_Ch6 is
Last_Source_Node_In_Sequence (Statements (HSS));
begin
if Present (Stat)
and then not Nkind_In (Nkind (Stat),
and then not Nkind_In (Stat,
N_Simple_Return_Statement,
N_Extended_Return_Statement)
then
......
......@@ -2078,15 +2078,19 @@ package body Sem_Disp is
-- The location of entities that come from source in the list of
-- primitives of the tagged type must follow their order of occurrence
-- in the sources to fulfill the C++ ABI. If the overridden entity is a
-- primitive of an interface that is not an ancestor of this tagged
-- type (that is, it is an entity added to the list of primitives by
-- Derive_Interface_Progenitors), then we must append the new entity
-- at the end of the list of primitives.
-- primitive of an interface that is not implemented by the parents of
-- this tagged type (that is, it is an alias of an interface primitive
-- generated by Derive_Interface_Progenitors), then we must append the
-- new entity at the end of the list of primitives.
if Present (Alias (Prev_Op))
and then Etype (Tagged_Type) /= Tagged_Type
and then Is_Interface (Find_Dispatching_Type (Alias (Prev_Op)))
and then not Is_Ancestor (Find_Dispatching_Type (Alias (Prev_Op)),
Tagged_Type)
and then not Implements_Interface
(Etype (Tagged_Type),
Find_Dispatching_Type (Alias (Prev_Op)))
then
Remove_Elmt (Primitive_Operations (Tagged_Type), Elmt);
Append_Elmt (New_Op, Primitive_Operations (Tagged_Type));
......
......@@ -7986,13 +7986,12 @@ package body Sem_Util is
----------------------------------
function Last_Source_Node_In_Sequence (List : List_Id) return Node_Id is
N : Node_Id := Last (List);
N : Node_Id;
begin
N := Last (List);
while Present (N) loop
exit when Comes_From_Source (N);
-- Reach before the generated statements at the end of the function
N := Prev (N);
end loop;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment