diff options
author | Javier Miranda <miranda@adacore.com> | 2011-08-02 07:46:39 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-08-02 09:46:39 +0200 |
commit | 4ac2477e65c5b506eda0f3cef1696478270a1f97 (patch) | |
tree | 61844b84eee7975832e53b9b23a6b4cc4e5590af /gcc/ada/exp_util.adb | |
parent | 9f90d12301fa640d4664b7924cbacb75e9e304d2 (diff) | |
download | gcc-4ac2477e65c5b506eda0f3cef1696478270a1f97.zip gcc-4ac2477e65c5b506eda0f3cef1696478270a1f97.tar.gz gcc-4ac2477e65c5b506eda0f3cef1696478270a1f97.tar.bz2 |
sem_type.ads, [...] (Is_Ancestor): Addition of a new formal (Use_Full_View) which permits this routine to climb...
2011-08-02 Javier Miranda <miranda@adacore.com>
* sem_type.ads, sem_type.adb (Is_Ancestor): Addition of a new formal
(Use_Full_View) which permits this routine to climb through the
ancestors using the full-view of private parents.
* sem_util.adb (Collect_Interfaces_Info, Implements_Interface): Set
Use_Full_View to true in calls to Is_Ancestor.
* sem_disp.adb (Override_Dispatching_Operation): Set Use_Full_View to
true in call to Is_Ancestor.
* exp_ch3.adb (Build_Offset_To_Top_Functions, Initialize_Tag): Set
Use_Full_View to true in call to Is_Ancestor.
* exp_ch7.adb (Controller_Component): Set Use_Full_View to true in
call to Is_Ancestor.
* exp_ch4.adb (Expand_N_Type_Conversion, Tagged_Membership): Set
Use_Full_View to true in calls to Is_Ancestor.
* exp_disp.adb (Expand_Interface_Actuals, Make_Secondary_DT, Make_DT,
Make_Select_Specific_Data_Table, Register_Primitive,
Set_All_DT_Position): Set Use_Full_View to true in calls to Is_Ancestor.
* exp_intr.adb (Expand_Dispatching_Constructor_Call): Set Use_Full_View
to true in call to Is_Ancestor.
* exp_util.adb (Find_Interface_ADT, Find_Interface_Tag): Set
Use_Full_View to true in calls to Is_Ancestor.
* exp_cg.adb
(Write_Call_Info): Set Use_Full_View to true in call to Is_Ancestor.
(Write_Type_Info): Set Use_Full_View to true in call to Is_Ancestor.
From-SVN: r177087
Diffstat (limited to 'gcc/ada/exp_util.adb')
-rw-r--r-- | gcc/ada/exp_util.adb | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 48e2283..74e916f 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -1501,7 +1501,7 @@ package body Exp_Util is (not Is_Class_Wide_Type (Typ) and then Ekind (Typ) /= E_Incomplete_Type); - if Is_Ancestor (Iface, Typ) then + if Is_Ancestor (Iface, Typ, Use_Full_View => True) then return First_Elmt (Access_Disp_Table (Typ)); else @@ -1510,7 +1510,8 @@ package body Exp_Util is while Present (ADT) and then Present (Related_Type (Node (ADT))) and then Related_Type (Node (ADT)) /= Iface - and then not Is_Ancestor (Iface, Related_Type (Node (ADT))) + and then not Is_Ancestor (Iface, Related_Type (Node (ADT)), + Use_Full_View => True) loop Next_Elmt (ADT); end loop; @@ -1576,7 +1577,9 @@ package body Exp_Util is while Present (AI_Elmt) loop AI := Node (AI_Elmt); - if AI = Iface or else Is_Ancestor (Iface, AI) then + if AI = Iface + or else Is_Ancestor (Iface, AI, Use_Full_View => True) + then Found := True; return; end if; @@ -1628,7 +1631,7 @@ package body Exp_Util is -- If the interface is an ancestor of the type, then it shared the -- primary dispatch table. - if Is_Ancestor (Iface, Typ) then + if Is_Ancestor (Iface, Typ, Use_Full_View => True) then pragma Assert (Etype (First_Tag_Component (Typ)) = RTE (RE_Tag)); return First_Tag_Component (Typ); |