Skip to main content

Options

Struct Options 

Source
pub struct Options {
    pub logical_depth: u32,
    pub recompute_depth: u32,
    pub refinements: usize,
    pub budget: u64,
}
Expand description

The limits, all three of which exist because the thing they bound is otherwise unbounded.

Fields§

§logical_depth: u32

How deep into a condition the edge calculation looks, and how far back along the chain from a condition to a value the inversion walks.

GCC’s ranger-logical-depth, whose default at gcc/params.opt:998 is also six.

§recompute_depth: u32

How many dominating edges one query walks before it stops narrowing.

GCC’s ranger-recompute-depth at gcc/params.opt:1003 bounds a related walk with the same default of five. The two are not the same walk, so the number is borrowed and the meaning is not.

§refinements: usize

How many block-specific answers the cache keeps for one value.

Section 10.6’s one threshold. A query past it gets the range at the definition.

§budget: u64

How many definitions one set of queries works out before it stops narrowing.

The other three bound one walk each and none of them bounds what a function’s worth of questions adds up to. What makes that a real number rather than a theoretical one is the cycle rule: a range worked out while a cycle was open was worked out under an assumption, so it is not cached, so the next question about it does the whole cycle again. Eight blocks that dispatch to each other through a computed goto are eight values in one cycle and every question about any of them walks all eight, which multiplies rather than adds.

Past this every answer is the whole of the type. That is what a range knowing nothing is, so what a program over the limit loses is code quality and not correctness, and Counts::exhausted is how it is found out about rather than guessed at.

Trait Implementations§

Source§

impl Clone for Options

Source§

fn clone(&self) -> Options

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Copy for Options

Source§

impl Debug for Options

Source§

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

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

impl Default for Options

Source§

fn default() -> Self

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

impl Eq for Options

Source§

impl PartialEq for Options

Source§

fn eq(&self, other: &Options) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Options

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, 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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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.