Commit 3567ca3f by Ed Schonberg Committed by Pierre-Marie de Rodat

[Ada] Fix Enclosing_Subprogram for protected entries and task entries

2018-07-17  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_util.adb (Enclosing_Subprogram): Protected entries and task
	entries must be treated separately: task entries are within the
	enclosing subprogram of the task type, while protected entries are
	transformed into the corresponding Protected_Body_Subprogram, which is
	the enclosing_subprogram of any subprogram declared within the entry
	body.

From-SVN: r262778
parent eae2aa7c
2018-07-17 Ed Schonberg <schonberg@adacore.com>
* sem_util.adb (Enclosing_Subprogram): Protected entries and task
entries must be treated separately: task entries are within the
enclosing subprogram of the task type, while protected entries are
transformed into the corresponding Protected_Body_Subprogram, which is
the enclosing_subprogram of any subprogram declared within the entry
body.
2018-07-17 Hristian Kirtchev <kirtchev@adacore.com>
* doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add missing
......
......@@ -6906,10 +6906,25 @@ package body Sem_Util is
elsif Ekind (Dynamic_Scope) = E_Subprogram_Body then
return Corresponding_Spec (Parent (Parent (Dynamic_Scope)));
elsif Ekind_In (Dynamic_Scope, E_Block, E_Return_Statement, E_Entry)
then
elsif Ekind_In (Dynamic_Scope, E_Block, E_Return_Statement) then
return Enclosing_Subprogram (Dynamic_Scope);
elsif Ekind (Dynamic_Scope) = E_Entry then
-- For a task entry, return the enclosing subprogram of the
-- task itself.
if Ekind (Scope (Dynamic_Scope)) = E_Task_Type then
return Enclosing_Subprogram (Dynamic_Scope);
-- A protected entry is rewritten as a protected procedure
-- which is the desired enclosing subprogram. This is relevant
-- when unnesting a procedure local to an entry body
else
return Protected_Body_Subprogram (Dynamic_Scope);
end if;
elsif Ekind (Dynamic_Scope) = E_Task_Type then
return Get_Task_Body_Procedure (Dynamic_Scope);
......
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