Enum rustc_mir::borrow_check::nll::type_check::Locations [−][src]
🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
The Locations type summarizes where region constraints are
required to hold. Normally, this is at a particular point which
created the obligation, but for constraints that the user gave, we
want the constraint to hold at all points.
Variants
All🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
Indicates that a type constraint should always be true. This is particularly important in the new borrowck analysis for things like the type of the return slot. Consider this example:
fn foo<'a>(x: &'a u32) -> &'a u32 { let y = 22; return &y; // error }
Here, we wind up with the signature from the return type being
something like &'1 u32 where '1 is a universal region. But
the type of the return slot _0 is something like &'2 u32
where '2 is an existential region variable. The type checker
requires that &'2 u32 = &'1 u32 -- but at what point? In the
older NLL analysis, we required this only at the entry point
to the function. By the nature of the constraints, this wound
up propagating to all points reachable from start (because
'1 -- as a universal region -- is live everywhere). In the
newer analysis, though, this doesn't work: _0 is considered
dead at the start (it has no usable value) and hence this type
equality is basically a no-op. Then, later on, when we do _0 = &'3 y, that region '3 never winds up related to the
universal region '1 and hence no error occurs. Therefore, we
use Locations::All instead, which ensures that the '1 and
'2 are equal everything. We also use this for other
user-given type annotations; e.g., if the user wrote let mut x: &'static u32 = ..., we would ensure that all values
assigned to x are of 'static lifetime.
Pair🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
Fields of Pair
from_location: Location | 🔬 This is a nightly-only experimental API. ( |
at_location: Location | 🔬 This is a nightly-only experimental API. ( |
Methods
impl Locations[src]
impl Locationspub fn from_location(&self) -> Option<Location>[src]
pub fn from_location(&self) -> Option<Location>🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
pub fn at_location(&self) -> Option<Location>[src]
pub fn at_location(&self) -> Option<Location>🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?
Trait Implementations
impl Copy for Locations[src]
impl Copy for Locationsimpl Clone for Locations[src]
impl Clone for Locationsfn clone(&self) -> Locations[src]
fn clone(&self) -> LocationsReturns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)1.0.0[src]
fn clone_from(&mut self, source: &Self)Performs copy-assignment from source. Read more
impl Debug for Locations[src]
impl Debug for Locationsfn fmt(&self, f: &mut Formatter) -> Result[src]
fn fmt(&self, f: &mut Formatter) -> ResultFormats the value using the given formatter. Read more
impl ToLocations for Locations[src]
impl ToLocations for Locationsfn to_locations(self) -> Locations[src]
fn to_locations(self) -> Locations🔬 This is a nightly-only experimental API. (rustc_private)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml instead?