Module rustc_mir::borrow_check[][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?

This query borrow-checks the MIR to (further) ensure it is not broken.

Re-exports

use borrow_check::nll::region_infer::RegionCausalInfo;
use borrow_check::nll::region_infer::RegionInferenceContext;
use rustc::hir;
use rustc::hir::def_id::DefId;
use rustc::hir::map::definitions::DefPathData;
use rustc::infer::InferCtxt;
use rustc::ty;
use rustc::ty::ParamEnv;
use rustc::ty::TyCtxt;
use rustc::ty::maps::Providers;
use rustc::lint::builtin::UNUSED_MUT;
use rustc::mir::AggregateKind;
use rustc::mir::BasicBlock;
use rustc::mir::BorrowCheckResult;
use rustc::mir::BorrowKind;
use rustc::mir::ClearCrossCrate;
use rustc::mir::Local;
use rustc::mir::Location;
use rustc::mir::Place;
use rustc::mir::Mir;
use rustc::mir::Mutability;
use rustc::mir::Operand;
use rustc::mir::Projection;
use rustc::mir::ProjectionElem;
use rustc::mir::Rvalue;
use rustc::mir::Field;
use rustc::mir::Statement;
use rustc::mir::StatementKind;
use rustc::mir::Terminator;
use rustc::mir::TerminatorKind;
use rustc_data_structures::control_flow_graph::dominators::Dominators;
use rustc_data_structures::fx::FxHashSet;
use rustc_data_structures::indexed_set::IdxSetBuf;
use rustc_data_structures::indexed_vec::Idx;
use rustc_data_structures::small_vec::SmallVec;
use std::rc::Rc;
use syntax_pos::Span;
use dataflow::do_dataflow;
use dataflow::DebugFormatted;
use dataflow::FlowAtLocation;
use dataflow::MoveDataParamEnv;
use dataflow::DataflowResultsConsumer;
use dataflow::MaybeInitializedPlaces;
use dataflow::MaybeUninitializedPlaces;
use dataflow::EverInitializedPlaces;
use dataflow::MovingOutStatements;
use dataflow::Borrows;
use dataflow::indexes::BorrowIndex;
use dataflow::move_paths::IllegalMoveOriginKind;
use dataflow::move_paths::MoveError;
use dataflow::move_paths::HasMoveData;
use dataflow::move_paths::LookupResult;
use dataflow::move_paths::MoveData;
use dataflow::move_paths::MovePathIndex;
use util::borrowck_errors::BorrowckErrors;
use util::borrowck_errors::Origin;
use util::collect_writes::FindAssignments;
use std::iter;
use self::borrow_set::BorrowSet;
use self::borrow_set::BorrowData;
use self::flows::Flows;
use self::location::LocationTable;
use self::prefixes::PrefixSet;
use self::MutateMode::JustWrite;
use self::MutateMode::WriteAndRead;
use self::ShallowOrDeep::Deep;
use self::ShallowOrDeep::Shallow;
use self::ReadOrWrite::Activation;
use self::ReadOrWrite::Read;
use self::ReadOrWrite::Reservation;
use self::ReadOrWrite::Write;

Modules

borrow_set [
Experimental
]
error_reporting [
Experimental
]
flows [
Experimental
]

Manages the dataflow bits required for borrowck.

location [
Experimental
]
nll [
Experimental
]
place_ext [
Experimental
]
prefixes [
Experimental
]

From the NLL RFC: "The deep [aka 'supporting'] prefixes for an place are formed by stripping away fields and derefs, except that we stop when we reach the deref of a shared reference. [...] "

Structs

AccessErrorsReported [
Experimental
]
Context [
Experimental
]
MirBorrowckCtxt [
Experimental
]
RootPlace [
Experimental
]

Enums

ArtificialField [
Experimental
]
ContextKind [
Experimental
]
Control [
Experimental
]
InitializationRequiringAction [
Experimental
]
LocalMutationIsAllowed [
Experimental
]

When checking permissions for a place access, this flag is used to indicate that an immutable local place can be mutated.

MutateMode [
Experimental
]
NoMovePathFound [
Experimental
]
Overlap [
Experimental
]

The degree of overlap between 2 places for borrow-checking.

ReadKind [
Experimental
]

Kind of read access to a value (For informational purposes only)

ReadOrWrite [
Experimental
]

Kind of access to a value: read or write (For informational purposes only)

ShallowOrDeep [
Experimental
]
WriteKind [
Experimental
]

Kind of write access to a value (For informational purposes only)

Functions

do_mir_borrowck [
Experimental
]
mir_borrowck [
Experimental
]
provide [
Experimental
]