diff options
author | Tristan Gingold <tgingold@free.fr> | 2023-02-08 16:03:13 +0100 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2023-02-08 16:04:32 +0100 |
commit | c348e697dd910173d6d64dc78b43adad316e892a (patch) | |
tree | f86d6d1aa2fa31d98c1acd85d50c2e8b3de3a1bc /src/vhdl/vhdl-canon.adb | |
parent | d78acf8f24949f608fa0dd20719ea67ba5621a5c (diff) | |
download | ghdl-c348e697dd910173d6d64dc78b43adad316e892a.tar.gz ghdl-c348e697dd910173d6d64dc78b43adad316e892a.tar.bz2 ghdl-c348e697dd910173d6d64dc78b43adad316e892a.zip |
vhdl-canon: remove signal parameters for all-sensitized processes.
Fix #2344
Diffstat (limited to 'src/vhdl/vhdl-canon.adb')
-rw-r--r-- | src/vhdl/vhdl-canon.adb | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/src/vhdl/vhdl-canon.adb b/src/vhdl/vhdl-canon.adb index 6cb8ca5c0..906a4720b 100644 --- a/src/vhdl/vhdl-canon.adb +++ b/src/vhdl/vhdl-canon.adb @@ -696,7 +696,49 @@ package body Vhdl.Canon is Set_Seen_Flag (Proc, True); Clear_Seen_Flag (Proc); - return Res; + -- Filter out signal parameters. + declare + It, It2 : List_Iterator; + Res2 : Iir_List; + El, El2 : Iir; + Base : Iir; + begin + Res2 := Null_Iir_List; + + It := List_Iterate_Safe (Res); + while Is_Valid (It) loop + El := Get_Element (It); + Base := Get_Object_Prefix (El); + if Is_Signal_Parameter (Base) then + -- Discard + if Res2 = Null_Iir_List then + -- So we need a different list to discard some elements. + -- Duplicate the list until EL. + Res2 := Create_Iir_List; + It2 := List_Iterate (Res); + loop + El2 := Get_Element (It2); + exit when El2 = El; + Append_Element (Res2, El2); + Next (It2); + end loop; + end if; + else + if Res2 /= Null_Iir_List then + Append_Element (Res2, El); + end if; + end if; + Next (It); + end loop; + + if Res2 /= Null_Iir_List then + Destroy_Iir_List (Res); + return Res2; + else + -- No element removed. + return Res; + end if; + end; end Canon_Extract_Sensitivity_Process; procedure Canon_Aggregate_Expression (Expr: Iir) |