diff options
| author | bors <bors@rust-lang.org> | 2025-01-07 15:22:00 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-01-07 15:22:00 +0000 |
| commit | ad211ced81509462cdfe4c29ed10f97279a0acae (patch) | |
| tree | d7a8e3791fcc40fca85d9537f62ecf659ab56709 /compiler/rustc_mir_transform/src | |
| parent | fb546ee09b226bc4dd4b712d35a372d923c4fa54 (diff) | |
| parent | 225ffebc0a5785c6316c6b544e1700245957de9f (diff) | |
| download | rust-ad211ced81509462cdfe4c29ed10f97279a0acae.tar.gz rust-ad211ced81509462cdfe4c29ed10f97279a0acae.zip | |
Auto merge of #135202 - GuillaumeGomez:rollup-9xgs39t, r=GuillaumeGomez
Rollup of 9 pull requests Successful merges: - #135081 (bootstrap: Build jemalloc with support for 64K pages) - #135174 ([AIX] Port test case run-make/reproducible-build ) - #135177 (llvm: Ignore error value that is always false) - #135182 (Transmute from NonNull to pointer when elaborating a box deref (MCP807)) - #135187 (apply a workaround fix for the release roadblock) - #135189 (Remove workaround from pull request template) - #135193 (don't bless `proc_macro_deps.rs` unless it's necessary) - #135198 (Avoid naming variables `str`) - #135199 (Eliminate an unnecessary `Symbol::to_string`; use `as_str`) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_mir_transform/src')
| -rw-r--r-- | compiler/rustc_mir_transform/src/elaborate_box_derefs.rs | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/compiler/rustc_mir_transform/src/elaborate_box_derefs.rs b/compiler/rustc_mir_transform/src/elaborate_box_derefs.rs index b909dfa1320..d6ecadbfe29 100644 --- a/compiler/rustc_mir_transform/src/elaborate_box_derefs.rs +++ b/compiler/rustc_mir_transform/src/elaborate_box_derefs.rs @@ -29,13 +29,8 @@ fn build_ptr_tys<'tcx>( pub(super) fn build_projection<'tcx>( unique_ty: Ty<'tcx>, nonnull_ty: Ty<'tcx>, - ptr_ty: Ty<'tcx>, -) -> [PlaceElem<'tcx>; 3] { - [ - PlaceElem::Field(FieldIdx::ZERO, unique_ty), - PlaceElem::Field(FieldIdx::ZERO, nonnull_ty), - PlaceElem::Field(FieldIdx::ZERO, ptr_ty), - ] +) -> [PlaceElem<'tcx>; 2] { + [PlaceElem::Field(FieldIdx::ZERO, unique_ty), PlaceElem::Field(FieldIdx::ZERO, nonnull_ty)] } struct ElaborateBoxDerefVisitor<'a, 'tcx> { @@ -75,10 +70,14 @@ impl<'a, 'tcx> MutVisitor<'tcx> for ElaborateBoxDerefVisitor<'a, 'tcx> { self.patch.add_assign( location, Place::from(ptr_local), - Rvalue::Use(Operand::Copy( - Place::from(place.local) - .project_deeper(&build_projection(unique_ty, nonnull_ty, ptr_ty), tcx), - )), + Rvalue::Cast( + CastKind::Transmute, + Operand::Copy( + Place::from(place.local) + .project_deeper(&build_projection(unique_ty, nonnull_ty), tcx), + ), + ptr_ty, + ), ); place.local = ptr_local; @@ -133,8 +132,10 @@ impl<'tcx> crate::MirPass<'tcx> for ElaborateBoxDerefs { let (unique_ty, nonnull_ty, ptr_ty) = build_ptr_tys(tcx, boxed_ty, unique_did, nonnull_did); - new_projections - .extend_from_slice(&build_projection(unique_ty, nonnull_ty, ptr_ty)); + new_projections.extend_from_slice(&build_projection(unique_ty, nonnull_ty)); + // While we can't project into `NonNull<_>` in a basic block + // due to MCP#807, this is debug info where it's fine. + new_projections.push(PlaceElem::Field(FieldIdx::ZERO, ptr_ty)); new_projections.push(PlaceElem::Deref); } else if let Some(new_projections) = new_projections.as_mut() { // Keep building up our projections list once we've started it. |
