From 100cd38bc4da75a5637fa221fd95cd2ae77bc56a Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Wed, 7 Sep 2022 04:45:34 +0200 Subject: elab-vhdl_heap: fix handling of simple access types --- src/synth/elab-vhdl_heap.adb | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/synth/elab-vhdl_heap.adb b/src/synth/elab-vhdl_heap.adb index 60c215405..ed026a64e 100644 --- a/src/synth/elab-vhdl_heap.adb +++ b/src/synth/elab-vhdl_heap.adb @@ -48,15 +48,28 @@ package body Elab.Vhdl_Heap is is Typ_Sz : constant Size_Type := Acc_Typ.Acc_Bnd_Sz; E : Heap_Entry; - T : Type_Acc; begin pragma Assert (Acc_Typ.Kind = Type_Access); E.Obj := Alloc_Mem (Obj_Typ.Sz); - E.Typ := Alloc_Mem (Typ_Sz); - T := Save_Type (Obj_Typ, E.Typ, Typ_Sz); - pragma Unreferenced (T); + if Typ_Sz > 0 then + declare + T : Type_Acc; + begin + E.Typ := Alloc_Mem (Typ_Sz); + T := Save_Type (Obj_Typ, E.Typ, Typ_Sz); + pragma Unreferenced (T); + end; + else + declare + function To_Memory_Ptr is new Ada.Unchecked_Conversion + (Type_Acc, Memory_Ptr); + begin + E.Typ := To_Memory_Ptr (Obj_Typ); + end; + end if; + Res := E.Obj; Heap_Table.Append (E); -- cgit v1.2.3