@@ -75,8 +75,8 @@ pub struct FrameState {
7575 protected_tags : SmallVec < [ ( AllocId , BorTag ) ; 2 ] > ,
7676}
7777
78- impl VisitTags for FrameState {
79- fn visit_tags ( & self , _visit : & mut dyn FnMut ( BorTag ) ) {
78+ impl VisitProvenance for FrameState {
79+ fn visit_provenance ( & self , _visit : & mut VisitWith < ' _ > ) {
8080 // `protected_tags` are already recorded by `GlobalStateInner`.
8181 }
8282}
@@ -110,10 +110,10 @@ pub struct GlobalStateInner {
110110 unique_is_unique : bool ,
111111}
112112
113- impl VisitTags for GlobalStateInner {
114- fn visit_tags ( & self , visit : & mut dyn FnMut ( BorTag ) ) {
113+ impl VisitProvenance for GlobalStateInner {
114+ fn visit_provenance ( & self , visit : & mut VisitWith < ' _ > ) {
115115 for & tag in self . protected_tags . keys ( ) {
116- visit ( tag) ;
116+ visit ( None , Some ( tag) ) ;
117117 }
118118 // The only other candidate is base_ptr_tags, and that does not need visiting since we don't ever
119119 // GC the bottommost/root tag.
@@ -236,6 +236,10 @@ impl GlobalStateInner {
236236 tag
237237 } )
238238 }
239+
240+ pub fn remove_unreachable_allocs ( & mut self , allocs : & LiveAllocs < ' _ , ' _ , ' _ > ) {
241+ self . base_ptr_tags . retain ( |id, _| allocs. is_live ( * id) ) ;
242+ }
239243}
240244
241245/// Which borrow tracking method to use
@@ -503,11 +507,11 @@ impl AllocState {
503507 }
504508}
505509
506- impl VisitTags for AllocState {
507- fn visit_tags ( & self , visit : & mut dyn FnMut ( BorTag ) ) {
510+ impl VisitProvenance for AllocState {
511+ fn visit_provenance ( & self , visit : & mut VisitWith < ' _ > ) {
508512 match self {
509- AllocState :: StackedBorrows ( sb) => sb. visit_tags ( visit) ,
510- AllocState :: TreeBorrows ( tb) => tb. visit_tags ( visit) ,
513+ AllocState :: StackedBorrows ( sb) => sb. visit_provenance ( visit) ,
514+ AllocState :: TreeBorrows ( tb) => tb. visit_provenance ( visit) ,
511515 }
512516 }
513517}
0 commit comments