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 Locations
pub 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 Locations
impl Clone for Locations
[src]
impl Clone for Locations
fn clone(&self) -> Locations
[src]
fn clone(&self) -> Locations
Returns 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 Locations
fn fmt(&self, f: &mut Formatter) -> Result
[src]
fn fmt(&self, f: &mut Formatter) -> Result
Formats the value using the given formatter. Read more
impl ToLocations for Locations
[src]
impl ToLocations for Locations
fn 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?