don't track borrows for empty regions
Region inference can create borrows for an empty region if the borrow is dead. In that case, there's no reason to track the borrow, but because there's no such thing as an EndRegion(ReEmpty) these borrows used to live for the entire function. Fixes #46161.
This commit is contained in:
parent
a6e24fc31f
commit
25416c7081
2 changed files with 7 additions and 0 deletions
|
@ -212,6 +212,12 @@ impl<'a, 'gcx, 'tcx> BitDenotation for Borrows<'a, 'gcx, 'tcx> {
|
|||
mir::StatementKind::Assign(_, ref rhs) => {
|
||||
if let mir::Rvalue::Ref(region, _, ref place) = *rhs {
|
||||
if is_unsafe_place(self.tcx, self.mir, place) { return; }
|
||||
if let RegionKind::ReEmpty = region {
|
||||
// If the borrowed value is dead, the region for it
|
||||
// can be empty. Don't track the borrow in that case.
|
||||
return
|
||||
}
|
||||
|
||||
let index = self.location_map.get(&location).unwrap_or_else(|| {
|
||||
panic!("could not find BorrowIndex for location {:?}", location);
|
||||
});
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// compile-flags: -Z borrowck=compare
|
||||
|
||||
static mut DROP: isize = 0;
|
||||
static mut DROP_S: isize = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue