Commit 625d8a9f by Eric Botcazou Committed by Arnaud Charlet

exp_ch3.adb (Build_Initialization_Call): Call Underlying_Type to go down the…

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
parent 38cea80d
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> 2014-08-01 Ed Schonberg <schonberg@adacore.com>
* sem_ch3.adb (Access_Type_Declaration): If designated type is * sem_ch3.adb (Access_Type_Declaration): If designated type is
......
...@@ -1491,14 +1491,20 @@ package body Exp_Ch3 is ...@@ -1491,14 +1491,20 @@ package body Exp_Ch3 is
return Empty_List; return Empty_List;
end if; end if;
-- Go to full view if private type. In the case of successive -- Go to full view or underlying full view if private type. In the case
-- private derivations, this can require more than one step. -- 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)) and then Present (Full_View (Full_Type))
loop then
Full_Type := Full_View (Full_Type); 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 -- If Typ is derived, the procedure is the initialization procedure for
-- the root type. Wrap the argument in an conversion to make it type -- the root type. Wrap the argument in an conversion to make it type
...@@ -1583,12 +1589,6 @@ package body Exp_Ch3 is ...@@ -1583,12 +1589,6 @@ package body Exp_Ch3 is
begin begin
if Is_Protected_Type (T) then if Is_Protected_Type (T) then
T := Corresponding_Record_Type (T); 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; end if;
Arg := Arg :=
......
...@@ -5034,7 +5034,7 @@ package body Freeze is ...@@ -5034,7 +5034,7 @@ package body Freeze is
-- Otherwise freeze full view and patch the pointers so that -- Otherwise freeze full view and patch the pointers so that
-- the freeze node will elaborate both views in the back end. -- the freeze node will elaborate both views in the back end.
-- However, if full view is itself private, freeze underlying -- 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. -- node will elaborate the three views in the back end.
else else
......
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