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
impl Debug for BorrowFacts
Auto Trait Implementations§
impl Freeze for BorrowFacts
impl RefUnwindSafe for BorrowFacts
impl Send for BorrowFacts
impl Sync for BorrowFacts
impl Unpin for BorrowFacts
impl UnsafeUnpin for BorrowFacts
impl UnwindSafe for BorrowFacts
Blanket Implementations§
impl<T> Allocation for 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> 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 more