Skip to main content

PointsToFacts

Struct PointsToFacts 

Source
pub struct PointsToFacts {
    pub body: BodyId,
    pub interner: LocInterner,
    /* private fields */
}
Expand description

Per-body points-to result.

Owns the body-local LocInterner and a flat SsaValue → PointsToSet table. The table is dense, one slot per SSA value, so lookups are O(1).

Fields§

§body: BodyId

Body the facts were computed for; used as the disambiguator inside crate::pointer::AbsLoc::Param / Alloc / SelfParam.

§interner: LocInterner

Interner for the super::domain::AbsLoc referenced by the per-value points-to sets.

Implementations§

Source§

impl PointsToFacts

Source

pub fn empty(body: BodyId) -> Self

Empty result, every value points to nothing. Used by callers that need a “no facts” placeholder when the analysis is disabled or the body could not be analysed.

Source

pub fn pt(&self, v: SsaValue) -> &PointsToSet

Borrow the points-to set for v. Returns an empty set when v is out of range (e.g. a value defined by an instruction the analysis didn’t visit).

Source

pub fn is_trivial(&self) -> bool

True when every value has an empty points-to set. Used as a fast-path skip in callers that only care about non-trivial aliasing.

Source

pub fn len(&self) -> usize

Number of SSA values covered by the facts table.

Source

pub fn is_empty(&self) -> bool

True when no SSA values are covered by the facts table.

Source

pub fn proxy_hint(&self, v: SsaValue) -> PtrProxyHint

Classify a value’s points-to set into a PtrProxyHint for consumers that only care about the “is this a sub-field alias” distinction. Returns PtrProxyHint::Other for empty sets, Top, and any set containing a root location (AbsLoc::SelfParam / AbsLoc::Param / AbsLoc::Alloc). Returns PtrProxyHint::FieldOnly iff every member is an AbsLoc::Field.

Source

pub fn name_proxy_hints(&self, body: &SsaBody) -> HashMap<String, PtrProxyHint>

Build a var_name → PtrProxyHint map by scanning the body’s value defs for the latest definition of each named variable. Names that resolve to no variable, or whose latest definition is Other, are omitted, only FieldOnly entries appear.

Iterates over SsaBody::value_defs in reverse order so the last (post-renaming) SSA definition for each name wins. Used by the resource-lifecycle pass to look up pt(receiver_text) in apply_call without re-walking the SSA body.

Trait Implementations§

Source§

impl Clone for PointsToFacts

Source§

fn clone(&self) -> PointsToFacts

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PointsToFacts

Source§

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

Formats the value using the given formatter. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<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<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,