sem_ch6.adb (Possible_Freeze): If the type is an incomplete CW type...

2016-04-19  Eric Botcazou  <ebotcazou@adacore.com>

	* sem_ch6.adb (Possible_Freeze): If the type is an incomplete
	CW type, then the subprogram must have a delayed freeze. This
	ensures that the backend can properly recover the full view when
	elaborating the access subprogram declaration.

From-SVN: r235195
This commit is contained in:
Eric Botcazou 2016-04-19 13:02:27 +00:00 committed by Arnaud Charlet
parent 16e764a7f4
commit 681014998b
2 changed files with 12 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2016-04-19 Eric Botcazou <ebotcazou@adacore.com>
* sem_ch6.adb (Possible_Freeze): If the type is an incomplete
CW type, then the subprogram must have a delayed freeze. This
ensures that the backend can properly recover the full view when
elaborating the access subprogram declaration.
2016-04-19 Ed Schonberg <schonberg@adacore.com>
* sem_attr.adb (Resolve_Attribute, case 'Access): Freeze

View File

@ -5251,8 +5251,9 @@ package body Sem_Ch6 is
-- T is the type of either a formal parameter or of the return type.
-- If T is not yet frozen and needs a delayed freeze, then the
-- subprogram itself must be delayed. If T is the limited view of an
-- incomplete type the subprogram must be frozen as well, because
-- T may depend on local types that have not been frozen yet.
-- incomplete type (or of a CW type thereof) the subprogram must be
-- frozen as well, because T may depend on local types that have not
-- been frozen yet.
---------------------
-- Possible_Freeze --
@ -5269,7 +5270,8 @@ package body Sem_Ch6 is
then
Set_Has_Delayed_Freeze (Designator);
elsif Ekind (T) = E_Incomplete_Type
elsif (Ekind (T) = E_Incomplete_Type
or else Ekind (T) = E_Class_Wide_Type)
and then From_Limited_With (T)
then
Set_Has_Delayed_Freeze (Designator);