From c1f5f40de1a580ff708122b8f1a5e2f8d9e7cdc3 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Tue, 4 Aug 2020 18:46:22 +0200 Subject: grt: fix crash in --dump-rti for array of unbounded records. For #1420 --- src/grt/grt-rtis_addr.adb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/grt/grt-rtis_addr.adb') diff --git a/src/grt/grt-rtis_addr.adb b/src/grt/grt-rtis_addr.adb index 4881a5abd..e02aa8e89 100644 --- a/src/grt/grt-rtis_addr.adb +++ b/src/grt/grt-rtis_addr.adb @@ -283,6 +283,26 @@ package body Grt.Rtis_Addr is return Layout + Ghdl_Index_Type'(Ghdl_Indexes_Type'Size / 8); end Array_Layout_To_Bounds; + function Array_Layout_To_Element + (Layout : Address; El_Rti : Ghdl_Rti_Access) return Address is + begin + case El_Rti.Kind is + when Ghdl_Rtik_Type_Array + | Ghdl_Rtik_Subtype_Array + | Ghdl_Rtik_Subtype_Unbounded_Array => + -- Trim size to pass the bounds + return Array_Layout_To_Bounds (Layout); + when Ghdl_Rtik_Type_Unbounded_Record + | Ghdl_Rtik_Subtype_Unbounded_Record => + -- Keep full layout. + return Layout; + when Ghdl_Rtik_Type_Record => + return Null_Address; + when others => + return Null_Address; + end case; + end Array_Layout_To_Element; + procedure Bound_To_Range (Bounds_Addr : Address; Def : Ghdl_Rtin_Type_Array_Acc; Res : out Ghdl_Range_Array) -- cgit v1.2.3