aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/exp_ch3.adb22
-rw-r--r--gcc/ada/freeze.adb2
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