diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-04-08 06:52:20 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-04-08 06:52:20 +0000 |
commit | daf0bf7928c575ff29a999fbb9e32e651732b5c2 (patch) | |
tree | 515e6f90b38a44f7dfc1af3edc330190b992bc3c /gcc | |
parent | b9ad87865f8d72307dbd601c18d87c8c932fc3a5 (diff) | |
download | gcc-daf0bf7928c575ff29a999fbb9e32e651732b5c2.tar.gz |
2008-04-08 Robert Dewar <dewar@adacore.com>
* sprint.adb (Write_Itype): Handle Itypes whose Parent field points to
the declaration for some different entity.
(Sprint_Node_Actual, case N_Derived_Type_Definition): When an interface
list is precent (following the parent subtype indication), display
appropriate "and" keyword.
* itypes.adb: Remove unnecessary calls to Init_Size_Align and Init_Esize
Remove unnecessary calls to Init_Size_Align and Init_Esize.
Add notes on use of Parent field of an Itype
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@134037 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/itypes.adb | 19 | ||||
-rw-r--r-- | gcc/ada/sprint.adb | 10 |
2 files changed, 20 insertions, 9 deletions
diff --git a/gcc/ada/itypes.adb b/gcc/ada/itypes.adb index cab817dfada..59155dc9d52 100644 --- a/gcc/ada/itypes.adb +++ b/gcc/ada/itypes.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2007, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2008, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -29,6 +29,7 @@ with Sem; use Sem; with Sinfo; use Sinfo; with Stand; use Stand; with Targparm; use Targparm; +with Uintp; use Uintp; package body Itypes is @@ -47,17 +48,24 @@ package body Itypes is Typ : Entity_Id; begin + -- Should comment setting of Public_Status here ??? + if Related_Id = Empty then Typ := New_Internal_Entity (Ekind, Scope_Id, Sloc (Related_Nod), 'T'); Set_Public_Status (Typ); else - Typ := New_External_Entity - (Ekind, Scope_Id, Sloc (Related_Nod), Related_Id, Suffix, - Suffix_Index, 'T'); + Typ := + New_External_Entity + (Ekind, Scope_Id, Sloc (Related_Nod), Related_Id, Suffix, + Suffix_Index, 'T'); end if; - Init_Size_Align (Typ); + -- Make sure Esize (Typ) was properly initialized, it should be since + -- New_Internal_Entity/New_External_Entity call Init_Size_Align. + + pragma Assert (Esize (Typ) = Uint_0); + Set_Etype (Typ, Any_Type); Set_Is_Itype (Typ); Set_Associated_Node_For_Itype (Typ, Related_Nod); @@ -95,7 +103,6 @@ package body Itypes is Set_Directly_Designated_Type (I_Typ, Directly_Designated_Type (T)); Set_Etype (I_Typ, T); - Init_Size_Align (I_Typ); Set_Depends_On_Private (I_Typ, Depends_On_Private (T)); Set_Is_Public (I_Typ, Is_Public (T)); Set_From_With_Type (I_Typ, From_With_Type (T)); diff --git a/gcc/ada/sprint.adb b/gcc/ada/sprint.adb index 7db69e479f4..c00eca4b29f 100644 --- a/gcc/ada/sprint.adb +++ b/gcc/ada/sprint.adb @@ -35,6 +35,7 @@ with Nlists; use Nlists; with Opt; use Opt; with Output; use Output; with Rtsfind; use Rtsfind; +with Sem_Util; use Sem_Util; with Sinfo; use Sinfo; with Sinput; use Sinput; with Sinput.D; use Sinput.D; @@ -1331,6 +1332,7 @@ package body Sprint is Sprint_Node (Subtype_Indication (Node)); if Present (Interface_List (Node)) then + Write_Str_With_Col_Check (" and "); Sprint_And_List (Interface_List (Node)); Write_Str_With_Col_Check (" with "); end if; @@ -3664,10 +3666,12 @@ package body Sprint is Write_Char (' '); end loop; - -- If we have a constructed declaration, print it - - if Present (P) and then Nkind (P) in N_Declaration then + -- If we have a constructed declaration for the itype, print it + if Present (P) + and then Nkind (P) in N_Declaration + and then Defining_Entity (P) = Typ + then -- We must set Itype_Printed true before the recursive call to -- print the node, otherwise we get an infinite recursion! |