From e663f3eaa705b80acdb7c97f52ac50b4beb76b7d Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Tue, 7 Nov 2017 08:04:03 +0100 Subject: Fix regression in nodes_gc. --- src/vhdl/nodes_gc.adb | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'src') diff --git a/src/vhdl/nodes_gc.adb b/src/vhdl/nodes_gc.adb index c32facef7..e9886d13b 100644 --- a/src/vhdl/nodes_gc.adb +++ b/src/vhdl/nodes_gc.adb @@ -98,6 +98,42 @@ package body Nodes_GC is end case; end Mark_Iir_List_Ref; + procedure Mark_Iir_Flist (N : Iir_Flist) + is + El : Iir; + begin + case N is + when Null_Iir_Flist + | Iir_Flist_All + | Iir_Flist_Others => + null; + when others => + for I in Flist_First .. Flist_Last (N) loop + El := Get_Nth_Element (N, I); + Mark_Iir (El); + end loop; + end case; + end Mark_Iir_Flist; + + procedure Mark_Iir_Flist_Ref (N : Iir_Flist; F : Fields_Enum) + is + El : Iir; + begin + case N is + when Null_Iir_Flist + | Iir_Flist_All + | Iir_Flist_Others => + null; + when others => + for I in Flist_First .. Flist_Last (N) loop + El := Get_Nth_Element (N, I); + if not Markers (El) then + Report_Early_Reference (El, F); + end if; + end loop; + end case; + end Mark_Iir_Flist_Ref; + procedure Mark_PSL_Node (N : PSL_Node) is begin null; @@ -242,6 +278,28 @@ package body Nodes_GC is Mark_Iir_List (Get_Iir_List (N, F)); end if; end; + when Type_Iir_Flist => + declare + Ref : Boolean; + begin + case Get_Field_Attribute (F) is + when Attr_None => + Ref := False; + when Attr_Of_Ref => + Ref := True; + when Attr_Of_Maybe_Ref => + Ref := Get_Is_Ref (N); + when Attr_Ref => + Ref := True; + when others => + raise Internal_Error; + end case; + if Ref then + Mark_Iir_Flist_Ref (Get_Iir_Flist (N, F), F); + else + Mark_Iir_Flist (Get_Iir_Flist (N, F)); + end if; + end; when Type_PSL_Node => Mark_PSL_Node (Get_PSL_Node (N, F)); when Type_PSL_NFA => -- cgit v1.2.3