@@ -75,8 +75,8 @@ pub struct FrameState {
75
75
protected_tags : SmallVec < [ ( AllocId , BorTag ) ; 2 ] > ,
76
76
}
77
77
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 < ' _ > ) {
80
80
// `protected_tags` are already recorded by `GlobalStateInner`.
81
81
}
82
82
}
@@ -110,10 +110,10 @@ pub struct GlobalStateInner {
110
110
unique_is_unique : bool ,
111
111
}
112
112
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 < ' _ > ) {
115
115
for & tag in self . protected_tags . keys ( ) {
116
- visit ( tag) ;
116
+ visit ( None , Some ( tag) ) ;
117
117
}
118
118
// The only other candidate is base_ptr_tags, and that does not need visiting since we don't ever
119
119
// GC the bottommost/root tag.
@@ -236,6 +236,10 @@ impl GlobalStateInner {
236
236
tag
237
237
} )
238
238
}
239
+
240
+ pub fn remove_unreachable_allocs ( & mut self , allocs : & LiveAllocs < ' _ , ' _ , ' _ > ) {
241
+ self . base_ptr_tags . retain ( |id, _| allocs. is_live ( * id) ) ;
242
+ }
239
243
}
240
244
241
245
/// Which borrow tracking method to use
@@ -503,11 +507,11 @@ impl AllocState {
503
507
}
504
508
}
505
509
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 < ' _ > ) {
508
512
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) ,
511
515
}
512
516
}
513
517
}
0 commit comments