Skip to main content

BorrowFacts

Struct BorrowFacts 

Source
pub struct BorrowFacts {
Show 22 fields pub loan_issued_at: Vec<(u32, u32)>, pub cfg_edge: Vec<(u32, u32)>, pub invalidates: Vec<(u32, u32)>, pub use_of_loan: Vec<(u32, u32)>, pub point_spans: HashMap<u32, Span>, pub loan_info: HashMap<u32, LoanInfo>, pub potential_conflicts: Vec<(u32, u32)>, pub writes: Vec<(u32, Place, Span)>, pub reads: Vec<(u32, Place, Span)>, pub slot_escape_status: HashMap<SlotId, EscapeStatus>, pub escaped_loans: Vec<(u32, Span)>, pub loan_sinks: Vec<LoanSink>, pub task_boundary_loans: Vec<(u32, Span)>, pub closure_capture_loans: Vec<(u32, Span)>, pub array_store_loans: Vec<(u32, Span)>, pub object_store_loans: Vec<(u32, Span)>, pub enum_store_loans: Vec<(u32, Span)>, pub object_assignment_loans: Vec<(u32, Span)>, pub array_assignment_loans: Vec<(u32, Span)>, pub return_reference_candidates: Vec<(ReturnReferenceSummary, Span)>, pub non_reference_return_spans: Vec<Span>, pub non_sendable_task_boundary: Vec<(u32, Span)>,
}
Expand description

Input facts extracted from MIR for the Datafrog solver.

Fields§

§loan_issued_at: Vec<(u32, u32)>

(loan_id, point) — loan was created at this point

§cfg_edge: Vec<(u32, u32)>

(from_point, to_point) — control flow edge

§invalidates: Vec<(u32, u32)>

(point, loan_id) — this point invalidates the loan (drop, reassignment)

§use_of_loan: Vec<(u32, u32)>

(loan_id, point) — the loan (reference) is used at this point

§point_spans: HashMap<u32, Span>

Source span for each statement point.

§loan_info: HashMap<u32, LoanInfo>

Loan metadata for error reporting.

§potential_conflicts: Vec<(u32, u32)>

Points where two loans conflict (same place, incompatible borrows).

§writes: Vec<(u32, Place, Span)>

Writes that may conflict with active loans: (point, place, span).

§reads: Vec<(u32, Place, Span)>

Reads from owner places that may conflict with active exclusive loans.

§slot_escape_status: HashMap<SlotId, EscapeStatus>

Escape classification for every local slot in the MIR function.

§escaped_loans: Vec<(u32, Span)>

Loans that flow into the dedicated return slot and would escape.

§loan_sinks: Vec<LoanSink>

Unified sink records for all loan escapes/stores/boundaries.

§task_boundary_loans: Vec<(u32, Span)>

Exclusive loans captured across an async/task boundary.

§closure_capture_loans: Vec<(u32, Span)>

Loans captured into a closure environment.

§array_store_loans: Vec<(u32, Span)>

Loans stored into array literals.

§object_store_loans: Vec<(u32, Span)>

Loans stored into object/struct literals.

§enum_store_loans: Vec<(u32, Span)>

Loans stored into enum payloads.

§object_assignment_loans: Vec<(u32, Span)>

Loans written through field assignments into aggregate places.

§array_assignment_loans: Vec<(u32, Span)>

Loans written through index assignments into aggregate places.

§return_reference_candidates: Vec<(ReturnReferenceSummary, Span)>

Reference-return summaries flowing into the return slot.

§non_reference_return_spans: Vec<Span>

Return-slot writes that produce a plain owned value.

§non_sendable_task_boundary: Vec<(u32, Span)>

Non-sendable values crossing detached task boundaries (e.g., closures with mutable captures).

Trait Implementations§

Source§

impl Debug for BorrowFacts

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for BorrowFacts

Source§

fn default() -> BorrowFacts

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,