Skip to content

Commit 027d73d

Browse files
committed
Restrict Fake Read precision
1 parent e51830b commit 027d73d

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

compiler/rustc_typeck/src/check/upvar.rs

+5
Original file line numberDiff line numberDiff line change
@@ -1588,6 +1588,11 @@ impl<'a, 'tcx> InferBorrowKind<'a, 'tcx> {
15881588
impl<'a, 'tcx> euv::Delegate<'tcx> for InferBorrowKind<'a, 'tcx> {
15891589
fn fake_read(&mut self, place: Place<'tcx>, cause: FakeReadCause, diag_expr_id: hir::HirId) {
15901590
if let PlaceBase::Upvar(_) = place.base {
1591+
// We need to restrict Fake Read precision to avoid fake reading unsafe code,
1592+
// such as deref of a raw pointer.
1593+
let place = restrict_capture_precision(place);
1594+
let place =
1595+
restrict_repr_packed_field_ref_capture(self.fcx.tcx, self.fcx.param_env, &place);
15911596
self.fake_reads.push((place, cause, diag_expr_id));
15921597
}
15931598
}

0 commit comments

Comments
 (0)