From adfe96ecbe5795f65f8214ce30073385de37bbc6 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Sat, 4 Jun 2022 07:06:25 +0200 Subject: elab-vhdl_types: handle array attributes on function call --- src/synth/elab-vhdl_expr.adb | 7 +++++++ src/synth/elab-vhdl_types.adb | 2 ++ 2 files changed, 9 insertions(+) (limited to 'src') diff --git a/src/synth/elab-vhdl_expr.adb b/src/synth/elab-vhdl_expr.adb index 76a9a59e8..72a0e2b8c 100644 --- a/src/synth/elab-vhdl_expr.adb +++ b/src/synth/elab-vhdl_expr.adb @@ -698,6 +698,13 @@ package body Elab.Vhdl_Expr is Val := Elab.Vhdl_Heap.Synth_Dereference (Read_Access (Val)); return Val.Typ; end; + when Iir_Kind_Function_Call => + declare + Val : Valtyp; + begin + Val := Synth.Vhdl_Expr.Synth_Expression (Syn_Inst, Name); + return Val.Typ; + end; when others => Error_Kind ("exec_name_subtype", Name); end case; diff --git a/src/synth/elab-vhdl_types.adb b/src/synth/elab-vhdl_types.adb index ad43277fb..ffddd20ae 100644 --- a/src/synth/elab-vhdl_types.adb +++ b/src/synth/elab-vhdl_types.adb @@ -82,6 +82,8 @@ package body Elab.Vhdl_Types is -- TODO: does this cover all the cases ? Typ := Get_Subtype_Object (Syn_Inst, Get_Subtype_Indication (Prefix)); else + -- The expression cannot be fully executed as it can be a signal + -- (whose evaluation is not allowed during elaboration). Typ := Exec_Name_Subtype (Syn_Inst, Prefix_Name); end if; -- cgit v1.2.3