aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2018-11-24 07:26:51 +0100
committerTristan Gingold <tgingold@free.fr>2018-11-24 07:26:51 +0100
commitd4708cc345e3c0a11c33e1ec197285229d1fd113 (patch)
tree5dc7450fa268a34e83b262e5b54a91e9b185e07c /src
parent1474383160069468694f2e64920ce968a80d58ab (diff)
downloadghdl-d4708cc345e3c0a11c33e1ec197285229d1fd113.tar.gz
ghdl-d4708cc345e3c0a11c33e1ec197285229d1fd113.tar.bz2
ghdl-d4708cc345e3c0a11c33e1ec197285229d1fd113.zip
trans-rtis: take into account instances in the count of packages.
rtis: check number of packages.
Diffstat (limited to 'src')
-rw-r--r--src/grt/grt-rtis.adb9
-rw-r--r--src/vhdl/translate/trans-rtis.adb19
2 files changed, 21 insertions, 7 deletions
diff --git a/src/grt/grt-rtis.adb b/src/grt/grt-rtis.adb
index 26d976459..7f4a00ff7 100644
--- a/src/grt/grt-rtis.adb
+++ b/src/grt/grt-rtis.adb
@@ -24,8 +24,11 @@
-- covered by the GNU Public License.
package body Grt.Rtis is
+ Max_Top_Pkg : Ghdl_Index_Type := 0;
+
procedure Ghdl_Rti_Add_Package (Pkg : Ghdl_Rti_Access) is
begin
+ pragma Assert (Ghdl_Rti_Top.Nbr_Child < Max_Top_Pkg);
Ghdl_Rti_Top.Children (Ghdl_Rti_Top.Nbr_Child) := Pkg;
Ghdl_Rti_Top.Nbr_Child := Ghdl_Rti_Top.Nbr_Child + 1;
end Ghdl_Rti_Add_Package;
@@ -33,10 +36,10 @@ package body Grt.Rtis is
procedure Ghdl_Rti_Add_Top (Max_Pkg : Ghdl_Index_Type;
Pkgs : Ghdl_Rti_Arr_Acc;
Top : Ghdl_Rti_Access;
- Instance : Address)
- is
- pragma Unreferenced (Max_Pkg);
+ Instance : Address) is
begin
+ Max_Top_Pkg := Max_Pkg;
+
Ghdl_Rti_Top.Parent := Top;
Ghdl_Rti_Top.Children := Pkgs;
Ghdl_Rti_Top_Instance := Instance;
diff --git a/src/vhdl/translate/trans-rtis.adb b/src/vhdl/translate/trans-rtis.adb
index 00ee0a0ee..7a1baf407 100644
--- a/src/vhdl/translate/trans-rtis.adb
+++ b/src/vhdl/translate/trans-rtis.adb
@@ -2930,6 +2930,7 @@ package body Trans.Rtis is
Unit : Iir_Design_Unit;
Lib : Iir_Library_Declaration;
+ Lib_Unit : Iir;
Prev : Rti_Block;
begin
Push_Rti_Node (Prev);
@@ -2943,10 +2944,20 @@ package body Trans.Rtis is
Lib := Get_Library (Get_Design_File (Unit));
Generate_Library (Lib, True);
- if Get_Kind (Get_Library_Unit (Unit)) = Iir_Kind_Package_Declaration
- then
- Nbr_Pkgs := Nbr_Pkgs + 1;
- end if;
+ -- Count the number of top-level packages.
+ Lib_Unit := Get_Library_Unit (Unit);
+ case Get_Kind (Lib_Unit) is
+ when Iir_Kind_Package_Declaration =>
+ Nbr_Pkgs := Nbr_Pkgs + 1;
+ when Iir_Kind_Package_Instantiation_Declaration =>
+ if Get_Macro_Expanded_Flag
+ (Get_Uninstantiated_Package_Decl (Lib_Unit))
+ then
+ Nbr_Pkgs := Nbr_Pkgs + 1;
+ end if;
+ when others =>
+ null;
+ end case;
end loop;
Pop_Rti_Node (Prev);