Commit c5326593 by Ed Schonberg Committed by Arnaud Charlet

sem_prag.adb (Analyze pragma, [...]): Analyze argument of pragma, to capture…

sem_prag.adb (Analyze pragma, [...]): Analyze argument of pragma, to capture global references if the context is generic.

2009-07-10  Ed Schonberg  <schonberg@adacore.com>

	* sem_prag.adb (Analyze pragma, case Task_Name): Analyze argument of
	pragma, to capture global references if the context is generic.

	* exp_ch2.adb (Expand_Discriminant): If a task type discriminant
	appears within the initialization procedure for the corresponding
	record, replace it with the proper discriminal.

From-SVN: r149459
parent 156f545a
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- B o d y --
-- -- -- --
-- Copyright (C) 1992-2008, Free Software Foundation, Inc. -- -- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- -- -- --
-- GNAT is free software; you can redistribute it and/or modify it under -- -- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -308,6 +308,17 @@ package body Exp_Ch2 is ...@@ -308,6 +308,17 @@ package body Exp_Ch2 is
and then In_Entry and then In_Entry
then then
Set_Entity (N, CR_Discriminant (Entity (N))); Set_Entity (N, CR_Discriminant (Entity (N)));
-- Finally, if the entity is the discriminant of the original
-- type declaration, and we are within the initialization
-- procedure for a task, the designated entity is the
-- discriminal of the task body. This can happen when the
-- argument of pragma Task_Name mentions a discriminant,
-- because the pragma is analyzed in the task declaration
-- but is expanded in the call to Create_Task in the init_proc.
elsif Within_Init_Proc then
Set_Entity (N, Discriminal (CR_Discriminant (Entity (N))));
else else
Set_Entity (N, Discriminal (Entity (N))); Set_Entity (N, Discriminal (Entity (N)));
end if; end if;
......
...@@ -11248,9 +11248,11 @@ package body Sem_Prag is ...@@ -11248,9 +11248,11 @@ package body Sem_Prag is
Arg := Expression (Arg1); Arg := Expression (Arg1);
-- The expression is used in the call to Create_Task, and must be -- The expression is used in the call to Create_Task, and must be
-- expanded there, not in the context of the current spec. -- expanded there, not in the context of the current spec. It must
-- however be analyzed to capture global references, in case it
-- appears in a generic context.
Preanalyze_And_Resolve (New_Copy_Tree (Arg), Standard_String); Preanalyze_And_Resolve (Arg, Standard_String);
if Nkind (P) /= N_Task_Definition then if Nkind (P) /= N_Task_Definition then
Pragma_Misplaced; Pragma_Misplaced;
......
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