diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/synth/synth-stmts.adb | 45 | 
1 files changed, 25 insertions, 20 deletions
| diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb index a127a7914..7b25a456e 100644 --- a/src/synth/synth-stmts.adb +++ b/src/synth/synth-stmts.adb @@ -135,25 +135,22 @@ package body Synth.Stmts is             | Iir_Kind_Signal_Declaration             | Iir_Kind_Anonymous_Signal_Declaration             | Iir_Kind_Interface_Constant_Declaration -           | Iir_Kind_Constant_Declaration => +           | Iir_Kind_Constant_Declaration +           | Iir_Kind_Object_Alias_Declaration =>              declare                 Targ : constant Value_Acc := Get_Value (Syn_Inst, Pfx);              begin -               Dest_Obj := Targ; -               Dest_Off := 0; -               Dest_Voff := No_Net; -               Dest_Rdwd := 0; -               Dest_Type := Targ.Typ; -            end; -         when Iir_Kind_Object_Alias_Declaration => -            declare -               Targ : constant Value_Acc := Get_Value (Syn_Inst, Pfx); -            begin -               Dest_Obj := Targ.A_Obj; -               Dest_Off := Targ.A_Off;                 Dest_Voff := No_Net;                 Dest_Rdwd := 0;                 Dest_Type := Targ.Typ; + +               if Targ.Kind = Value_Alias then +                  Dest_Obj := Targ.A_Obj; +                  Dest_Off := Targ.A_Off; +               else +                  Dest_Obj := Targ; +                  Dest_Off := 0; +               end if;              end;           when Iir_Kind_Indexed_Name =>              declare @@ -1279,17 +1276,25 @@ package body Synth.Stmts is                 declare                    Info : Target_Info renames Infos (Nbr_Inout);                 begin -                  case Info.Kind is -                     when Target_Aggregate => +                  if Info.Kind /= Target_Simple then +                     raise Internal_Error; +                  end if; +                  case Iir_Kinds_Interface_Object_Declaration +                    (Get_Kind (Inter)) +                  is +                     when Iir_Kind_Interface_Constant_Declaration =>                          raise Internal_Error; -                     when Target_Simple => +                     when Iir_Kind_Interface_Variable_Declaration => +                        --  Always pass by value.                          Val := Synth_Read_Memory                            (Caller_Inst, Info.Obj, Info.Off, No_Net,                             Info.Targ_Type, Assoc); -                     when Target_Memory => -                        Val := Synth_Read_Memory -                          (Caller_Inst, Info.Mem_Obj, Info.Mem_Off, -                           Info.Mem_Voff, Info.Targ_Type, Assoc); +                     when Iir_Kind_Interface_Signal_Declaration => +                        --  Always pass by reference (use an alias). +                        Val := Create_Value_Alias +                          (Info.Obj, Info.Off, Info.Targ_Type); +                     when Iir_Kind_Interface_File_Declaration => +                        raise Internal_Error;                    end case;                 end;           end case; | 
