exp_ch3.adb (Build_Initialization_Call): Call Underlying_Type to go down the chain of private derivations.

2014-08-01  Eric Botcazou  <ebotcazou@adacore.com>

	* exp_ch3.adb (Build_Initialization_Call): Call Underlying_Type
	to go down the chain of private derivations.
	* freeze.adb (Freeze_Entity): Fix typo in comment.

From-SVN: r213465
This commit is contained in:
Eric Botcazou 2014-08-01 13:51:43 +00:00 committed by Arnaud Charlet
parent 38cea80dc4
commit 625d8a9f89
3 changed files with 18 additions and 12 deletions

View File

@ -1,3 +1,9 @@
2014-08-01 Eric Botcazou <ebotcazou@adacore.com>
* exp_ch3.adb (Build_Initialization_Call): Call Underlying_Type
to go down the chain of private derivations.
* freeze.adb (Freeze_Entity): Fix typo in comment.
2014-08-01 Ed Schonberg <schonberg@adacore.com>
* sem_ch3.adb (Access_Type_Declaration): If designated type is

View File

@ -1491,14 +1491,20 @@ package body Exp_Ch3 is
return Empty_List;
end if;
-- Go to full view if private type. In the case of successive
-- private derivations, this can require more than one step.
-- Go to full view or underlying full view if private type. In the case
-- of successive private derivations, this can require two steps.
while Is_Private_Type (Full_Type)
if Is_Private_Type (Full_Type)
and then Present (Full_View (Full_Type))
loop
then
Full_Type := Full_View (Full_Type);
end loop;
end if;
if Is_Private_Type (Full_Type)
and then Present (Underlying_Full_View (Full_Type))
then
Full_Type := Underlying_Full_View (Full_Type);
end if;
-- If Typ is derived, the procedure is the initialization procedure for
-- the root type. Wrap the argument in an conversion to make it type
@ -1583,12 +1589,6 @@ package body Exp_Ch3 is
begin
if Is_Protected_Type (T) then
T := Corresponding_Record_Type (T);
elsif Is_Private_Type (T)
and then Present (Underlying_Full_View (T))
and then Is_Protected_Type (Underlying_Full_View (T))
then
T := Corresponding_Record_Type (Underlying_Full_View (T));
end if;
Arg :=

View File

@ -5034,7 +5034,7 @@ package body Freeze is
-- Otherwise freeze full view and patch the pointers so that
-- the freeze node will elaborate both views in the back end.
-- However, if full view is itself private, freeze underlying
-- full view instead and patch the pointer so that the freeze
-- full view instead and patch the pointers so that the freeze
-- node will elaborate the three views in the back end.
else