pub enum FakeBorrowKind {
    Shallow,
    Deep,
}Variants§
Shallow
A shared shallow borrow. The immediately borrowed place must be immutable, but projections
from it don’t need to be. For example, a shallow borrow of a.b doesn’t conflict with a
mutable borrow of a.b.c.
This is used when lowering matches: when matching on a place we want to ensure that place have the same value from the start of the match until an arm is selected. This prevents this code from compiling:
let mut x = &Some(0);
match *x {
    None => (),
    Some(_) if { x = &None; false } => (),
    Some(_) => (),
}This can’t be a shared borrow because mutably borrowing (*x as Some).0 should not checking
the discriminant or accessing other variants, because the mutating (*x as Some).0 can’t
affect the discriminant of x. E.g. the following is allowed:
let mut x = Some(0);
match x {
    Some(_)
        if {
            if let Some(ref mut y) = x {
                *y += 1;
            };
            true
        } => {}
    _ => {}
}Deep
A shared (deep) borrow. Data must be immutable and is aliasable.
This is used when lowering deref patterns, where shallow borrows wouldn’t prevent something like:
let mut b = Box::new(false);
match b {
    deref!(true) => {} // not reached because `*b == false`
    _ if { *b = true; false } => {} // not reached because the guard is `false`
    deref!(false) => {} // not reached because the guard changed it
    // UB because we reached the unreachable.
}Trait Implementations§
Source§impl Clone for FakeBorrowKind
 
impl Clone for FakeBorrowKind
Source§fn clone(&self) -> FakeBorrowKind
 
fn clone(&self) -> FakeBorrowKind
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FakeBorrowKind
 
impl Debug for FakeBorrowKind
Source§impl<'tcx, __D: TyDecoder<'tcx>> Decodable<__D> for FakeBorrowKind
 
impl<'tcx, __D: TyDecoder<'tcx>> Decodable<__D> for FakeBorrowKind
Source§impl<'tcx, __E: TyEncoder<'tcx>> Encodable<__E> for FakeBorrowKind
 
impl<'tcx, __E: TyEncoder<'tcx>> Encodable<__E> for FakeBorrowKind
Source§impl Hash for FakeBorrowKind
 
impl Hash for FakeBorrowKind
Source§impl<'__ctx> HashStable<StableHashingContext<'__ctx>> for FakeBorrowKind
 
impl<'__ctx> HashStable<StableHashingContext<'__ctx>> for FakeBorrowKind
fn hash_stable( &self, __hcx: &mut StableHashingContext<'__ctx>, __hasher: &mut StableHasher, )
Source§impl Ord for FakeBorrowKind
 
impl Ord for FakeBorrowKind
Source§fn cmp(&self, other: &FakeBorrowKind) -> Ordering
 
fn cmp(&self, other: &FakeBorrowKind) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
    Self: Sized,
 
fn max(self, other: Self) -> Selfwhere
    Self: Sized,
Source§impl PartialEq for FakeBorrowKind
 
impl PartialEq for FakeBorrowKind
Source§impl PartialOrd for FakeBorrowKind
 
impl PartialOrd for FakeBorrowKind
impl Copy for FakeBorrowKind
impl Eq for FakeBorrowKind
impl StructuralPartialEq for FakeBorrowKind
Auto Trait Implementations§
impl DynSend for FakeBorrowKind
impl DynSync for FakeBorrowKind
impl Freeze for FakeBorrowKind
impl RefUnwindSafe for FakeBorrowKind
impl Send for FakeBorrowKind
impl Sync for FakeBorrowKind
impl Unpin for FakeBorrowKind
impl UnwindSafe for FakeBorrowKind
Blanket Implementations§
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
    T: Copy,
 
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
    T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
Source§impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
    T: Copy,
 
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
    T: Copy,
fn allocate_on(self, arena: &'tcx Arena<'tcx>) -> &'tcx mut T
fn allocate_from_iter( arena: &'tcx Arena<'tcx>, iter: impl IntoIterator<Item = T>, ) -> &'tcx mut [T]
Source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
    T: Clone,
 
impl<T> CloneToUninit for Twhere
    T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
 
impl<T, R> CollectAndApply<T, R> for T
Source§impl<Q, K> Comparable<K> for Q
 
impl<Q, K> Comparable<K> for Q
Source§impl<Tcx, T> DepNodeParams<Tcx> for T
 
impl<Tcx, T> DepNodeParams<Tcx> for T
default fn fingerprint_style() -> FingerprintStyle
Source§default fn to_fingerprint(&self, tcx: Tcx) -> Fingerprint
 
default fn to_fingerprint(&self, tcx: Tcx) -> Fingerprint
default fn to_debug_str(&self, tcx: Tcx) -> String
Source§default fn recover(_: Tcx, _: &DepNode) -> Option<T>
 
default fn recover(_: Tcx, _: &DepNode) -> Option<T>
DepNode,
something which is needed when forcing DepNodes during red-green
evaluation. The query system will only call this method if
fingerprint_style() is not FingerprintStyle::Opaque.
It is always valid to return None here, in which case incremental
compilation will treat the query as having changed instead of forcing it.Source§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
 
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<P> IntoQueryParam<P> for P
 
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
 
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
 
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
    U: UpcastFrom<I, T>,
 
impl<I, T, U> Upcast<I, U> for Twhere
    U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
 
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<Tcx, T> Value<Tcx> for Twhere
    Tcx: DepContext,
 
impl<Tcx, T> Value<Tcx> for Twhere
    Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
 
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
 
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
 
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
    T: 'static,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 1 byte
Size for each variant:
- Shallow: 0 bytes
- Deep: 0 bytes