diff options
Diffstat (limited to 'src/vhdl/translate/trans-rtis.adb')
-rw-r--r-- | src/vhdl/translate/trans-rtis.adb | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/src/vhdl/translate/trans-rtis.adb b/src/vhdl/translate/trans-rtis.adb index 5b55c69c6..d52a025db 100644 --- a/src/vhdl/translate/trans-rtis.adb +++ b/src/vhdl/translate/trans-rtis.adb @@ -877,16 +877,19 @@ package body Trans.Rtis is function Generate_Rti_Array (Id : O_Ident) return O_Dnode is - List : O_Array_Aggr_List; - L : Rti_Array_List_Acc; - Nbr : Integer; - Val : O_Cnode; - Res : O_Dnode; + List : O_Array_Aggr_List; + L : Rti_Array_List_Acc; + Nbr : Integer; + Val : O_Cnode; + Res : O_Dnode; + Stype : O_Tnode; begin - New_Const_Decl (Res, Id, O_Storage_Private, Ghdl_Rti_Array); + Stype := New_Array_Subtype + (Ghdl_Rti_Array, Ghdl_Rti_Access, + New_Index_Lit (Unsigned_64 (Cur_Block.Nbr + 1))); + New_Const_Decl (Res, Id, O_Storage_Private, Stype); Start_Init_Value (Res); - Start_Array_Aggr - (List, Ghdl_Rti_Array, Unsigned_32 (Cur_Block.Nbr + 1)); + Start_Array_Aggr (List, Stype, Unsigned_32 (Cur_Block.Nbr + 1)); Nbr := Cur_Block.Nbr; -- First chunk. @@ -1094,6 +1097,7 @@ package body Trans.Rtis is type Dnode_Array is array (Natural range <>) of O_Dnode; Name_Lits : Dnode_Array (0 .. Nbr_Lit - 1); Mark : Id_Mark_Type; + Name_Arr_St : O_Tnode; Name_Arr : O_Dnode; Arr_Aggr : O_Array_Aggr_List; @@ -1110,11 +1114,14 @@ package body Trans.Rtis is end loop; -- Generate array of names. + Name_Arr_St := New_Array_Subtype + (Char_Ptr_Array_Type, + Char_Ptr_Type, + New_Index_Lit (Unsigned_64 (Nbr_Lit))); New_Const_Decl (Name_Arr, Create_Identifier ("RTINAMES"), - O_Storage_Private, Char_Ptr_Array_Type); + O_Storage_Private, Name_Arr_St); Start_Init_Value (Name_Arr); - Start_Array_Aggr - (Arr_Aggr, Char_Ptr_Array_Type, Unsigned_32 (Nbr_Lit)); + Start_Array_Aggr (Arr_Aggr, Name_Arr_St, Unsigned_32 (Nbr_Lit)); for I in Name_Lits'Range loop New_Array_Aggr_El (Arr_Aggr, New_Name_Address (Name_Lits (I))); end loop; @@ -1405,6 +1412,7 @@ package body Trans.Rtis is Index : Iir; Tmp : O_Dnode; pragma Unreferenced (Tmp); + Stype : O_Tnode; Arr_Aggr : O_Array_Aggr_List; Val : O_Cnode; Mark : Id_Mark_Type; @@ -1420,11 +1428,13 @@ package body Trans.Rtis is end loop; -- Generate array of index. + Stype := New_Array_Subtype (Ghdl_Rti_Array, Ghdl_Rti_Access, + New_Index_Lit (Unsigned_64 (Nbr_Indexes))); New_Const_Decl (Res, Create_Identifier ("RTIINDEXES"), - Global_Storage, Ghdl_Rti_Array); + Global_Storage, Stype); Start_Init_Value (Res); - Start_Array_Aggr (Arr_Aggr, Ghdl_Rti_Array, Unsigned_32 (Nbr_Indexes)); + Start_Array_Aggr (Arr_Aggr, Stype, Unsigned_32 (Nbr_Indexes)); for I in 1 .. Nbr_Indexes loop Index := Get_Index_Type (List, I - 1); New_Array_Aggr_El |