diff options
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/exp_ch3.adb | 22 | ||||
-rw-r--r-- | gcc/ada/freeze.adb | 2 |
3 files changed, 18 insertions, 12 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 225c24c..a7a0e2b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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 diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 48008b0..f90c60d 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -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 := diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 9af48a8..8963ad0 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -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 |