Commit d950f051 by Arnaud Charlet

[multiple changes]

2014-01-31  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_res.adb (Resolve_Entity_Name): Comment
	reformatting. Allow volatile objects in various generated checks.

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

	* sem_attr.adb (Analyze_Attribute, case 'Update): For a record
	component association, set the etype of the identifier, for
	SPARK use.

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

	* exp_ch6.adb (Has_Visibility_Of_Subprogram): If type is not
	declared in a package, not checks can apply to the subprogram.

From-SVN: r207353
parent 74c10109
2014-01-31 Hristian Kirtchev <kirtchev@adacore.com>
* sem_res.adb (Resolve_Entity_Name): Comment
reformatting. Allow volatile objects in various generated checks.
2014-01-31 Ed Schonberg <schonberg@adacore.com>
* sem_attr.adb (Analyze_Attribute, case 'Update): For a record
component association, set the etype of the identifier, for
SPARK use.
2014-01-31 Ed Schonberg <schonberg@adacore.com>
* exp_ch6.adb (Has_Visibility_Of_Subprogram): If type is not
declared in a package, not checks can apply to the subprogram.
2014-01-31 Robert Dewar <dewar@adacore.com> 2014-01-31 Robert Dewar <dewar@adacore.com>
* erroutc.adb (Validate_Specific_Warnings): Warnings are * erroutc.adb (Validate_Specific_Warnings): Warnings are
......
...@@ -8697,9 +8697,7 @@ package body Exp_Ch6 is ...@@ -8697,9 +8697,7 @@ package body Exp_Ch6 is
function Has_Public_Visibility_Of_Subprogram return Boolean is function Has_Public_Visibility_Of_Subprogram return Boolean is
Subp_Decl : constant Node_Id := Unit_Declaration_Node (Subp_Id); Subp_Decl : constant Node_Id := Unit_Declaration_Node (Subp_Id);
Vis_Decls : constant List_Id :=
Visible_Declarations (Specification
(Unit_Declaration_Node (Scope (Typ))));
begin begin
-- An Initialization procedure must be considered visible even -- An Initialization procedure must be considered visible even
-- though it is internally generated. -- though it is internally generated.
...@@ -8707,6 +8705,9 @@ package body Exp_Ch6 is ...@@ -8707,6 +8705,9 @@ package body Exp_Ch6 is
if Is_Init_Proc (Defining_Entity (Subp_Decl)) then if Is_Init_Proc (Defining_Entity (Subp_Decl)) then
return True; return True;
elsif Ekind (Scope (Typ)) /= E_Package then
return False;
-- Internally generated code is never publicly visible except -- Internally generated code is never publicly visible except
-- for a subprogram that is the implementation of an expression -- for a subprogram that is the implementation of an expression
-- function. In that case the visibility is determined by the -- function. In that case the visibility is determined by the
...@@ -8724,7 +8725,9 @@ package body Exp_Ch6 is ...@@ -8724,7 +8725,9 @@ package body Exp_Ch6 is
-- declarations of the package containing the type. -- declarations of the package containing the type.
else else
return List_Containing (Subp_Decl) = Vis_Decls; return List_Containing (Subp_Decl) =
Visible_Declarations
(Specification (Unit_Declaration_Node (Scope (Typ))));
end if; end if;
end Has_Public_Visibility_Of_Subprogram; end Has_Public_Visibility_Of_Subprogram;
......
...@@ -6014,10 +6014,11 @@ package body Sem_Attr is ...@@ -6014,10 +6014,11 @@ package body Sem_Attr is
while Present (Comp_Or_Discr) loop while Present (Comp_Or_Discr) loop
if Chars (Comp_Or_Discr) = Comp_Name then if Chars (Comp_Or_Discr) = Comp_Name then
-- Record component entity in the given aggregate choice, -- Record component entity and type in the given aggregate
-- for subsequent resolution. -- choice, for subsequent resolution.
Set_Entity (Comp, Comp_Or_Discr); Set_Entity (Comp, Comp_Or_Discr);
Set_Etype (Comp, Etype (Comp_Or_Discr));
exit; exit;
end if; end if;
......
...@@ -6523,15 +6523,15 @@ package body Sem_Res is ...@@ -6523,15 +6523,15 @@ package body Sem_Res is
Prev := N; Prev := N;
while Present (Par) loop while Present (Par) loop
-- The variable can appear on either side of an assignment -- The volatile object can appear on either side of an assignment
if Nkind (Par) = N_Assignment_Statement then if Nkind (Par) = N_Assignment_Statement then
Usage_OK := True; Usage_OK := True;
exit; exit;
-- The variable is part of the initialization expression of an -- The volatile object is part of the initialization expression of
-- object. Ensure that the climb of the parent chain came from the -- another object. Ensure that the climb of the parent chain came
-- expression side and not from the name side. -- from the expression side and not from the name side.
elsif Nkind (Par) = N_Object_Declaration elsif Nkind (Par) = N_Object_Declaration
and then Present (Expression (Par)) and then Present (Expression (Par))
...@@ -6540,8 +6540,8 @@ package body Sem_Res is ...@@ -6540,8 +6540,8 @@ package body Sem_Res is
Usage_OK := True; Usage_OK := True;
exit; exit;
-- The variable appears as an actual parameter in a call to an -- The volatile object appears as an actual parameter in a call to
-- instance of Unchecked_Conversion whose result is renamed. -- an instance of Unchecked_Conversion whose result is renamed.
elsif Nkind (Par) = N_Function_Call elsif Nkind (Par) = N_Function_Call
and then Is_Unchecked_Conversion_Instance (Entity (Name (Par))) and then Is_Unchecked_Conversion_Instance (Entity (Name (Par)))
...@@ -6558,6 +6558,12 @@ package body Sem_Res is ...@@ -6558,6 +6558,12 @@ package body Sem_Res is
Usage_OK := True; Usage_OK := True;
exit; exit;
-- Allow references to volatile objects in various checks
elsif Nkind (Par) in N_Raise_xxx_Error then
Usage_OK := True;
exit;
-- Prevent the search from going too far -- Prevent the search from going too far
elsif Is_Body_Or_Package_Declaration (Par) then elsif Is_Body_Or_Package_Declaration (Par) then
......
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