[multiple changes]

2009-04-10  Robert Dewar  <dewar@adacore.com>

	* sem_warn.adb: Minor reformatting

	* make.adb: Minor reformatting.

2009-04-10  Gary Dismukes  <dismukes@adacore.com>

	* exp_ch7.adb (Find_Final_List): When creating a finalization-chain
	entity and the scope is a subprogram, retrieve the Sloc of the
	subprogram's body rather than using the sloc of the spec, for better
	line-stepping behavior in gdb.
	(Wrap_Transient_Declaration): For the Sloc of nodes created with a list
	controller, use the Sloc of the first declaration of the containing list
	rather than that of the node that triggered creation of the list
	controller.

From-SVN: r145887
This commit is contained in:
Arnaud Charlet 2009-04-10 12:41:08 +02:00
parent 2844b33046
commit c5288c909b
4 changed files with 80 additions and 27 deletions

View File

@ -1,3 +1,20 @@
2009-04-10 Robert Dewar <dewar@adacore.com>
* sem_warn.adb: Minor reformatting
* make.adb: Minor reformatting.
2009-04-10 Gary Dismukes <dismukes@adacore.com>
* exp_ch7.adb (Find_Final_List): When creating a finalization-chain
entity and the scope is a subprogram, retrieve the Sloc of the
subprogram's body rather than using the sloc of the spec, for better
line-stepping behavior in gdb.
(Wrap_Transient_Declaration): For the Sloc of nodes created with a list
controller, use the Sloc of the first declaration of the containing list
rather than that of the node that triggered creation of the list
controller.
2009-04-10 Vincent Celier <celier@adacore.com>
* prj-nmsc.adb (Check_Naming_Schemes): Initialize local variable Casing

View File

@ -1744,9 +1744,9 @@ package body Exp_Ch7 is
S := Enclosing_Dynamic_Scope (E);
end if;
-- When the finalization chain entity is 'Error', it means that
-- there should not be any chain at that level and that the
-- enclosing one should be used
-- When the finalization chain entity is 'Error', it means that there
-- should not be any chain at that level and that the enclosing one
-- should be used.
-- This is a nasty kludge, see ??? note in exp_ch11
@ -1758,9 +1758,34 @@ package body Exp_Ch7 is
return New_Reference_To (RTE (RE_Global_Final_List), Sloc (E));
else
if No (Finalization_Chain_Entity (S)) then
Id :=
Make_Defining_Identifier (Sloc (S),
Chars => New_Internal_Name ('F'));
-- In the case where the scope is a subprogram, retrieve the
-- Sloc of subprogram's body for association with the chain,
-- since using the Sloc of the spec would be confusing during
-- source-line stepping within the debugger.
declare
Flist_Loc : Source_Ptr := Sloc (S);
Subp_Body : Node_Id;
begin
if Ekind (S) in Subprogram_Kind then
Subp_Body := Unit_Declaration_Node (S);
if Nkind (Subp_Body) /= N_Subprogram_Body then
Subp_Body := Corresponding_Body (Subp_Body);
end if;
if Present (Subp_Body) then
Flist_Loc := Sloc (Subp_Body);
end if;
end if;
Id :=
Make_Defining_Identifier (Flist_Loc,
Chars => New_Internal_Name ('F'));
end;
Set_Finalization_Chain_Entity (S, Id);
-- Set momentarily some semantics attributes to allow normal
@ -3367,13 +3392,14 @@ package body Exp_Ch7 is
-- Finalize_One (_v2);
procedure Wrap_Transient_Declaration (N : Node_Id) is
S : Entity_Id;
LC : Entity_Id := Empty;
Nodes : List_Id;
Loc : constant Source_Ptr := Sloc (N);
Enclosing_S : Entity_Id;
Uses_SS : Boolean;
Next_N : constant Node_Id := Next (N);
S : Entity_Id;
LC : Entity_Id := Empty;
Nodes : List_Id;
Loc : constant Source_Ptr := Sloc (N);
First_Decl_Loc : Source_Ptr;
Enclosing_S : Entity_Id;
Uses_SS : Boolean;
Next_N : constant Node_Id := Next (N);
begin
S := Current_Scope;
@ -3397,19 +3423,26 @@ package body Exp_Ch7 is
if Present (Finalization_Chain_Entity (S)) then
LC := Make_Defining_Identifier (Loc, New_Internal_Name ('L'));
-- Use the Sloc of the first declaration of N's containing list, to
-- maintain monotonicity of source-line stepping during debugging.
First_Decl_Loc := Sloc (First (List_Containing (N)));
Nodes := New_List (
Make_Object_Declaration (Loc,
Make_Object_Declaration (First_Decl_Loc,
Defining_Identifier => LC,
Object_Definition =>
New_Reference_To (RTE (RE_Simple_List_Controller), Loc)),
New_Reference_To
(RTE (RE_Simple_List_Controller), First_Decl_Loc)),
Make_Object_Renaming_Declaration (Loc,
Make_Object_Renaming_Declaration (First_Decl_Loc,
Defining_Identifier => Finalization_Chain_Entity (S),
Subtype_Mark => New_Reference_To (RTE (RE_Finalizable_Ptr), Loc),
Subtype_Mark =>
New_Reference_To (RTE (RE_Finalizable_Ptr), First_Decl_Loc),
Name =>
Make_Selected_Component (Loc,
Prefix => New_Reference_To (LC, Loc),
Selector_Name => Make_Identifier (Loc, Name_F))));
Prefix => New_Reference_To (LC, First_Decl_Loc),
Selector_Name => Make_Identifier (First_Decl_Loc, Name_F))));
-- Put the declaration at the beginning of the declaration part
-- to make sure it will be before all other actions that have been

View File

@ -4112,10 +4112,10 @@ package body Make is
-- Never display -gnatea nor -gnatez
if Args (J).all /= "-gnatea" and then
Args (J).all /= "-gnatez"
if Args (J).all /= "-gnatea"
and then
Args (J).all /= "-gnatez"
then
-- Do not display the mapping file argument automatically
-- created when using a project file.

View File

@ -1888,9 +1888,9 @@ package body Sem_Warn is
-- the renaming may be intended to re-export the unit.
function Has_Visible_Entities (P : Entity_Id) return Boolean;
-- If a package has no declared entities, inhibit warning because
-- there is nothing to be referenced. The package may be in the
-- context just in order to carry a linker pragma for example.
-- This function determines if a package has any visible entities.
-- True is returned if there is at least one declared visible entity,
-- otherwise False is returned (e.g. case of only pragmas present).
-------------------------
-- Check_Inner_Package --
@ -2024,7 +2024,6 @@ package body Sem_Warn is
E : Entity_Id;
begin
-- If unit in context is not a package, it is a subprogram that
-- is not called or a generic unit that is not instantiated
-- in the current unit, and warning is appropriate.
@ -2110,7 +2109,11 @@ package body Sem_Warn is
if Unit = Spec_Unit then
Set_Unreferenced_In_Spec (Item);
-- Otherwise simple unreferenced message
-- Otherwise simple unreferenced message, but skip this
-- if no visible entities, because that is most likely a
-- case where warning would be false positive (e.g. a
-- package with only a linker options pragma and nothing
-- else or a pragma elaborate with a body library task).
elsif Has_Visible_Entities (Entity (Name (Item))) then
Error_Msg_N