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:
parent
38cea80dc4
commit
625d8a9f89
@ -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
|
||||
|
@ -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 :=
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user