Skip to content

Commit

Permalink
Delay an is_local_ever_initialized call.
Browse files Browse the repository at this point in the history
This commit moves the call after a `return` that almost always runs. It
speeds up the `unicode_normalization` benchmark by about 2%.
  • Loading branch information
nnethercote committed Nov 19, 2019
1 parent 0f0c640 commit 9651617
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions src/librustc_mir/borrow_check/mod.rs
Expand Up @@ -1883,16 +1883,6 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
let error_access;
let the_place_err;

// rust-lang/rust#21232, #54986: during period where we reject
// partial initialization, do not complain about mutability
// errors except for actual mutation (as opposed to an attempt
// to do a partial initialization).
let previously_initialized = if let PlaceBase::Local(local) = place.base {
self.is_local_ever_initialized(local, flow_state).is_some()
} else {
true
};

match kind {
Reservation(WriteKind::MutableBorrow(borrow_kind @ BorrowKind::Unique))
| Reservation(WriteKind::MutableBorrow(borrow_kind @ BorrowKind::Mut { .. }))
Expand Down Expand Up @@ -1966,8 +1956,18 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
}
}

// rust-lang/rust#21232, #54986: during period where we reject
// partial initialization, do not complain about mutability
// errors except for actual mutation (as opposed to an attempt
// to do a partial initialization).
let previously_initialized = if let PlaceBase::Local(local) = place.base {
self.is_local_ever_initialized(local, flow_state).is_some()
} else {
true
};

// at this point, we have set up the error reporting state.
return if previously_initialized {
if previously_initialized {
self.report_mutability_error(
place,
span,
Expand All @@ -1978,7 +1978,7 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
true
} else {
false
};
}
}

fn is_local_ever_initialized(
Expand Down

0 comments on commit 9651617

Please sign in to comment.