Commit 9ca67d3f by Ed Schonberg Committed by Arnaud Charlet

exp_ch6.adb (Expand_Protected_Subprogram_Call): Add guard to better detect call…

exp_ch6.adb (Expand_Protected_Subprogram_Call): Add guard to better detect call within an entry_wrapper.

2017-01-06  Ed Schonberg  <schonberg@adacore.com>

	* exp_ch6.adb (Expand_Protected_Subprogram_Call): Add guard to
	better detect call within an entry_wrapper.
	* sem_res.adb (Resolve_Call): A protected call within an
	entity_wrapper is analyzed in the context of the protected
	object but corresponds to a pre-analysis and is not an access
	before elaboration.
	* sem_attr.adb: Minor reformatting.

From-SVN: r244139
parent 5e127570
2017-01-06 Ed Schonberg <schonberg@adacore.com>
* exp_ch6.adb (Expand_Protected_Subprogram_Call): Add guard to
better detect call within an entry_wrapper.
* sem_res.adb (Resolve_Call): A protected call within an
entity_wrapper is analyzed in the context of the protected
object but corresponds to a pre-analysis and is not an access
before elaboration.
* sem_attr.adb: Minor reformatting.
2017-01-06 Justin Squirek <squirek@adacore.com> 2017-01-06 Justin Squirek <squirek@adacore.com>
* sem_attr.adb (Analyze_Attribute): Modify semantic checks for * sem_attr.adb (Analyze_Attribute): Modify semantic checks for
......
...@@ -6006,6 +6006,7 @@ package body Exp_Ch6 is ...@@ -6006,6 +6006,7 @@ package body Exp_Ch6 is
-- case this must be handled as an inter-object call. -- case this must be handled as an inter-object call.
if not In_Open_Scopes (Scop) if not In_Open_Scopes (Scop)
or else Is_Entry_Wrapper (Current_Scope)
or else not Is_Entity_Name (Name (N)) or else not Is_Entity_Name (Name (N))
then then
if Nkind (Name (N)) = N_Selected_Component then if Nkind (Name (N)) = N_Selected_Component then
......
...@@ -3840,24 +3840,29 @@ package body Sem_Attr is ...@@ -3840,24 +3840,29 @@ package body Sem_Attr is
when Attribute_Finalization_Size => when Attribute_Finalization_Size =>
Check_E0; Check_E0;
-- The prefix denotes an object
if Is_Object_Reference (P) then if Is_Object_Reference (P) then
Analyze_And_Resolve (P); Analyze_And_Resolve (P);
Check_Object_Reference (P); Check_Object_Reference (P);
-- Redundant type verification for accurate error output -- Check the prefix is a type to avoid an error message stating the
-- prefix must exclusively denote one
elsif Is_Entity_Name (P) and then Is_Type (Entity (P)) then
elsif not Is_Entity_Name (P)
or else not Is_Type (Entity (P))
then
Error_Attr_P ("prefix of % attribute must be a definite type or" &
" an object");
else
Check_Type; Check_Type;
Check_Not_Incomplete_Type; Check_Not_Incomplete_Type;
if Is_Class_Wide_Type (Etype (P)) then if Is_Class_Wide_Type (Etype (P)) then
Error_Attr_P ("prefix of % attribute cannot be applied to " & Error_Attr_P
"a class-wide type"); ("prefix of % attribute cannot denote a class-wide type");
end if; end if;
-- The prefix does not denote an object or a type
else
Error_Attr_P
("prefix of % attribute must be a definite type or an object");
end if; end if;
Set_Etype (N, Universal_Integer); Set_Etype (N, Universal_Integer);
......
...@@ -6287,12 +6287,14 @@ package body Sem_Res is ...@@ -6287,12 +6287,14 @@ package body Sem_Res is
-- A protected function cannot be called within the definition of the -- A protected function cannot be called within the definition of the
-- enclosing protected type, unless it is part of a pre/postcondition -- enclosing protected type, unless it is part of a pre/postcondition
-- on another protected operation. -- on another protected operation. This may appear in the entry
-- wrapper created for an entry with preconditions.
if Is_Protected_Type (Scope (Nam)) if Is_Protected_Type (Scope (Nam))
and then In_Open_Scopes (Scope (Nam)) and then In_Open_Scopes (Scope (Nam))
and then not Has_Completion (Scope (Nam)) and then not Has_Completion (Scope (Nam))
and then not In_Spec_Expression and then not In_Spec_Expression
and then not Is_Entry_Wrapper (Current_Scope)
then then
Error_Msg_NE Error_Msg_NE
("& cannot be called before end of protected definition", N, Nam); ("& cannot be called before end of protected definition", N, Nam);
......
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