diff options
| author | Tristan Gingold <tgingold@free.fr> | 2018-11-10 07:33:53 +0100 | 
|---|---|---|
| committer | Tristan Gingold <tgingold@free.fr> | 2018-11-10 07:33:53 +0100 | 
| commit | c59d83d278f2bb72630fc1e015b3c36b28d3b0c7 (patch) | |
| tree | 5e06d9f6340b816f622bb908ee7c9f5072de6f37 /src | |
| parent | 39f7879742b5b4b87a5b4881871ece229f968b5b (diff) | |
| download | ghdl-c59d83d278f2bb72630fc1e015b3c36b28d3b0c7.tar.gz ghdl-c59d83d278f2bb72630fc1e015b3c36b28d3b0c7.tar.bz2 ghdl-c59d83d278f2bb72630fc1e015b3c36b28d3b0c7.zip  | |
trans-chap5: do subtype conversion in signal association.
Diffstat (limited to 'src')
| -rw-r--r-- | src/vhdl/translate/trans-chap5.adb | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/src/vhdl/translate/trans-chap5.adb b/src/vhdl/translate/trans-chap5.adb index 4c3f0ce20..c85ed26f0 100644 --- a/src/vhdl/translate/trans-chap5.adb +++ b/src/vhdl/translate/trans-chap5.adb @@ -365,6 +365,7 @@ package body Trans.Chap5 is        Formal_Type : constant Iir := Get_Type (Formal);        Actual_Type : constant Iir := Get_Type (Actual);        Port        : constant Iir := Get_Interface_Of_Formal (Formal); +      Formal_Tinfo : Type_Info_Acc;        Formal_Sig  : Mnode;        Formal_Val  : Mnode;        Actual_Sig  : Mnode; @@ -421,10 +422,17 @@ package body Trans.Chap5 is                 Chap6.Translate_Signal_Name (Formal, Formal_Sig, Formal_Val);                 --  Copy pointer to the values. -               if Get_Info (Formal_Type).Type_Mode in Type_Mode_Composite then +               Formal_Tinfo := Get_Info (Formal_Type); +               if Formal_Tinfo.Type_Mode in Type_Mode_Composite then +                  --  Need to convert base, as you can assign a bounded type +                  --  to an unbounded type (or the opposite).  Maybe convert +                  --  only when needed ?  Subtype matching is checked below.                    New_Assign_Stmt                      (M2Lp (Chap3.Get_Composite_Base (Formal_Val)), -                     M2Addr (Chap3.Get_Composite_Unbounded_Base (Actual_Val))); +                     New_Convert_Ov +                       (M2Addr +                          (Chap3.Get_Composite_Unbounded_Base (Actual_Val)), +                       Formal_Tinfo.B.Base_Ptr_Type (Mode_Value)));                 else                    New_Assign_Stmt (M2Lp (Formal_Val), M2Addr (Actual_Val));                 end if;  | 
