diff options
| author | Roxane <roxane.fruytier@hotmail.com> | 2021-05-25 18:30:54 -0400 |
|---|---|---|
| committer | Roxane <roxane.fruytier@hotmail.com> | 2021-05-27 17:47:04 -0400 |
| commit | 027d73dcad10c5d70a313809ff584fc8f054b6a8 (patch) | |
| tree | 8f7bd6e587a327a3769c05f5645a3cb01ed88ff6 | |
| parent | e51830b90afd339332892a8f20db1957d43bf086 (diff) | |
| download | rust-027d73dcad10c5d70a313809ff584fc8f054b6a8.tar.gz rust-027d73dcad10c5d70a313809ff584fc8f054b6a8.zip | |
Restrict Fake Read precision
| -rw-r--r-- | compiler/rustc_typeck/src/check/upvar.rs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler/rustc_typeck/src/check/upvar.rs b/compiler/rustc_typeck/src/check/upvar.rs index 71e222c560a..6baa185406e 100644 --- a/compiler/rustc_typeck/src/check/upvar.rs +++ b/compiler/rustc_typeck/src/check/upvar.rs @@ -1588,6 +1588,11 @@ impl<'a, 'tcx> InferBorrowKind<'a, 'tcx> { impl<'a, 'tcx> euv::Delegate<'tcx> for InferBorrowKind<'a, 'tcx> { fn fake_read(&mut self, place: Place<'tcx>, cause: FakeReadCause, diag_expr_id: hir::HirId) { if let PlaceBase::Upvar(_) = place.base { + // We need to restrict Fake Read precision to avoid fake reading unsafe code, + // such as deref of a raw pointer. + let place = restrict_capture_precision(place); + let place = + restrict_repr_packed_field_ref_capture(self.fcx.tcx, self.fcx.param_env, &place); self.fake_reads.push((place, cause, diag_expr_id)); } } |
