diff options
| author | Tristan Gingold <tgingold@free.fr> | 2022-08-11 11:38:16 +0200 | 
|---|---|---|
| committer | Tristan Gingold <tgingold@free.fr> | 2022-08-11 11:38:16 +0200 | 
| commit | f8e9c51d6acc24c629103eb70f9ca16483b5a889 (patch) | |
| tree | f6215145eea57315473a5fbb24211da0e0dbb0c8 /src | |
| parent | 65258e6094ee8932412dea18c822cdcba1d0ed16 (diff) | |
| download | ghdl-f8e9c51d6acc24c629103eb70f9ca16483b5a889.tar.gz ghdl-f8e9c51d6acc24c629103eb70f9ca16483b5a889.tar.bz2 ghdl-f8e9c51d6acc24c629103eb70f9ca16483b5a889.zip  | |
trans-chap5: handle inertial individual association.  Fix #2118
Diffstat (limited to 'src')
| -rw-r--r-- | src/vhdl/translate/trans-chap5.adb | 33 | 
1 files changed, 20 insertions, 13 deletions
diff --git a/src/vhdl/translate/trans-chap5.adb b/src/vhdl/translate/trans-chap5.adb index 8ee426293..3924b8552 100644 --- a/src/vhdl/translate/trans-chap5.adb +++ b/src/vhdl/translate/trans-chap5.adb @@ -532,6 +532,21 @@ package body Trans.Chap5 is        Close_Temp;     end Elab_Port_Map_Aspect_Assoc; +   procedure Elab_Port_Map_Aspect_Assoc_Or_Inertial (Assoc : Iir; +                                                     Formal : Iir; +                                                     Formal_Env : Map_Env; +                                                     Actual_Env : Map_Env) is +   begin +      if Get_Kind (Assoc) = Iir_Kind_Association_Element_By_Expression +        and then Get_Inertial_Flag (Assoc) +      then +         Chap9.Elab_Inertial_Association (Assoc, Formal); +      else +         Elab_Port_Map_Aspect_Assoc +           (Assoc, Formal, False, Formal_Env, Actual_Env); +      end if; +   end Elab_Port_Map_Aspect_Assoc_Or_Inertial; +     function Alloc_Bounds (Atype : Iir; Alloc : Allocation_Kind) return Mnode     is        Tinfo : constant Type_Info_Acc := Get_Info (Atype); @@ -760,25 +775,17 @@ package body Trans.Chap5 is                          --  Create non-collapsed signals.                          Chap4.Elab_Signal_Declaration_Object                            (Formal, Block_Parent, False); -                        --  And associate (if not an inertial association). -                        if (Get_Kind (Assoc) -                              = Iir_Kind_Association_Element_By_Name) -                          or else (Get_Expr_Staticness (Get_Actual (Assoc)) -                                     /= None) -                        then -                           Elab_Port_Map_Aspect_Assoc -                             (Assoc, Formal, False, Formal_Env, Actual_Env); -                        else -                           Chap9.Elab_Inertial_Association (Assoc, Formal); -                        end if; +                        --  And associate +                        Elab_Port_Map_Aspect_Assoc_Or_Inertial +                             (Assoc, Formal, Formal_Env, Actual_Env);                       end if;                    else                       --  By sub-element.                       --  Never collapsed, signal was already created (by the                       --  By_Individual association).                       --  And associate. -                     Elab_Port_Map_Aspect_Assoc -                       (Assoc, Formal, False, Formal_Env, Actual_Env); +                     Elab_Port_Map_Aspect_Assoc_Or_Inertial +                       (Assoc, Formal, Formal_Env, Actual_Env);                    end if;                 when Iir_Kind_Association_Element_Open                   | Iir_Kind_Association_Element_By_Individual =>  | 
