Commit 45c9ce98 by Ed Schonberg Committed by Arnaud Charlet

sem_prag.adb (Analyze_PPC_In_Decl_Part): For a class-wide condition...

2013-07-05  Ed Schonberg  <schonberg@adacore.com>

	* sem_prag.adb (Analyze_PPC_In_Decl_Part): For a class-wide
	condition, when replacing the name of a formal by a conversion
	to the class-wide type, exempt selector names that appear in
	parameter associations.

From-SVN: r200689
parent fdc4e9d4
2013-07-05 Ed Schonberg <schonberg@adacore.com>
* sem_prag.adb (Analyze_PPC_In_Decl_Part): For a class-wide
condition, when replacing the name of a formal by a conversion
to the class-wide type, exempt selector names that appear in
parameter associations.
2013-06-13 Eric Botcazou <ebotcazou@adacore.com> 2013-06-13 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/ada-tree.h (DECL_BY_DOUBLE_REF_P): Delete. * gcc-interface/ada-tree.h (DECL_BY_DOUBLE_REF_P): Delete.
......
...@@ -1749,6 +1749,9 @@ package body Sem_Prag is ...@@ -1749,6 +1749,9 @@ package body Sem_Prag is
-- accessparameter of type access-to-T is interpreted as having -- accessparameter of type access-to-T is interpreted as having
-- type access-to-T'Class. This ensures the expression is well- -- type access-to-T'Class. This ensures the expression is well-
-- defined for a primitive subprogram of a type descended from T. -- defined for a primitive subprogram of a type descended from T.
-- Note that this replacement is not done for selector names in
-- parameter associations. These carry an entity for reference
-- purposes, but they semantically they are just identifiers.
------------- -------------
-- Get_ACW -- -- Get_ACW --
...@@ -1790,6 +1793,9 @@ package body Sem_Prag is ...@@ -1790,6 +1793,9 @@ package body Sem_Prag is
and then Present (Entity (N)) and then Present (Entity (N))
and then Is_Formal (Entity (N)) and then Is_Formal (Entity (N))
and then Nkind (Parent (N)) /= N_Type_Conversion and then Nkind (Parent (N)) /= N_Type_Conversion
and then
(Nkind (Parent (N)) /= N_Parameter_Association
or else N /= Selector_Name (Parent (N)))
then then
if Etype (Entity (N)) = T then if Etype (Entity (N)) = T then
Typ := Class_Wide_Type (T); Typ := Class_Wide_Type (T);
......
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