Prefer doc comments over //
-comments in compiler
This commit is contained in:
parent
0e9eee6811
commit
1d42936b18
83 changed files with 400 additions and 387 deletions
|
@ -5,37 +5,36 @@ use crate::util;
|
|||
use crate::MirPass;
|
||||
use rustc_middle::mir::patch::MirPatch;
|
||||
|
||||
// This pass moves values being dropped that are within a packed
|
||||
// struct to a separate local before dropping them, to ensure that
|
||||
// they are dropped from an aligned address.
|
||||
//
|
||||
// For example, if we have something like
|
||||
// ```Rust
|
||||
// #[repr(packed)]
|
||||
// struct Foo {
|
||||
// dealign: u8,
|
||||
// data: Vec<u8>
|
||||
// }
|
||||
//
|
||||
// let foo = ...;
|
||||
// ```
|
||||
//
|
||||
// We want to call `drop_in_place::<Vec<u8>>` on `data` from an aligned
|
||||
// address. This means we can't simply drop `foo.data` directly, because
|
||||
// its address is not aligned.
|
||||
//
|
||||
// Instead, we move `foo.data` to a local and drop that:
|
||||
// ```
|
||||
// storage.live(drop_temp)
|
||||
// drop_temp = foo.data;
|
||||
// drop(drop_temp) -> next
|
||||
// next:
|
||||
// storage.dead(drop_temp)
|
||||
// ```
|
||||
//
|
||||
// The storage instructions are required to avoid stack space
|
||||
// blowup.
|
||||
|
||||
/// This pass moves values being dropped that are within a packed
|
||||
/// struct to a separate local before dropping them, to ensure that
|
||||
/// they are dropped from an aligned address.
|
||||
///
|
||||
/// For example, if we have something like
|
||||
/// ```ignore (ilustrative)
|
||||
/// #[repr(packed)]
|
||||
/// struct Foo {
|
||||
/// dealign: u8,
|
||||
/// data: Vec<u8>
|
||||
/// }
|
||||
///
|
||||
/// let foo = ...;
|
||||
/// ```
|
||||
///
|
||||
/// We want to call `drop_in_place::<Vec<u8>>` on `data` from an aligned
|
||||
/// address. This means we can't simply drop `foo.data` directly, because
|
||||
/// its address is not aligned.
|
||||
///
|
||||
/// Instead, we move `foo.data` to a local and drop that:
|
||||
/// ```ignore (ilustrative)
|
||||
/// storage.live(drop_temp)
|
||||
/// drop_temp = foo.data;
|
||||
/// drop(drop_temp) -> next
|
||||
/// next:
|
||||
/// storage.dead(drop_temp)
|
||||
/// ```
|
||||
///
|
||||
/// The storage instructions are required to avoid stack space
|
||||
/// blowup.
|
||||
pub struct AddMovesForPackedDrops;
|
||||
|
||||
impl<'tcx> MirPass<'tcx> for AddMovesForPackedDrops {
|
||||
|
|
|
@ -25,7 +25,7 @@ pub fn build_ptr_tys<'tcx>(
|
|||
(unique_ty, nonnull_ty, ptr_ty)
|
||||
}
|
||||
|
||||
// Constructs the projection needed to access a Box's pointer
|
||||
/// Constructs the projection needed to access a Box's pointer
|
||||
pub fn build_projection<'tcx>(
|
||||
unique_ty: Ty<'tcx>,
|
||||
nonnull_ty: Ty<'tcx>,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue