aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/translate/trans-rtis.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/vhdl/translate/trans-rtis.adb')
-rw-r--r--src/vhdl/translate/trans-rtis.adb36
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