Module rustc_mir::borrow_check::nll::type_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 pass type-checks the MIR to ensure it is not broken.

Re-exports

use borrow_check::nll::region_infer::Cause;
use borrow_check::nll::region_infer::ClosureRegionRequirementsExt;
use borrow_check::nll::universal_regions::UniversalRegions;
use dataflow::move_paths::MoveData;
use dataflow::FlowAtLocation;
use dataflow::MaybeInitializedPlaces;
use rustc::hir::def_id::DefId;
use rustc::infer::region_constraints::GenericKind;
use rustc::infer::region_constraints::RegionConstraintData;
use rustc::infer::InferCtxt;
use rustc::infer::InferOk;
use rustc::infer::InferResult;
use rustc::infer::LateBoundRegionConversionTime;
use rustc::infer::UnitResult;
use rustc::mir::tcx::PlaceTy;
use rustc::mir::visit::PlaceContext;
use rustc::mir::visit::Visitor;
use rustc::mir::interpret::EvalErrorKind::BoundsCheck;
use rustc::mir::*;
use rustc::traits::query::NoSolution;
use rustc::traits;
use rustc::traits::Normalized;
use rustc::traits::TraitEngine;
use rustc::ty::error::TypeError;
use rustc::ty::fold::TypeFoldable;
use rustc::ty;
use rustc::ty::ToPolyTraitRef;
use rustc::ty::Ty;
use rustc::ty::TyCtxt;
use rustc::ty::TypeVariants;
use std::fmt;
use syntax::ast;
use syntax_pos::Span;
use syntax_pos::DUMMY_SP;
use transform::MirPass;
use transform::MirSource;
use util::liveness::LivenessResults;
use rustc_data_structures::fx::FxHashSet;
use rustc_data_structures::indexed_vec::Idx;

Modules

input_output [
Experimental
]

This module contains code to equate the input/output types appearing in the MIR with the expected input/output types from the function signature. This requires a bit of processing, as the expected types are supplied to us before normalization and may contain existential impl Trait instances. In contrast, the input/output types found in the MIR (specifically, in the special local variables for the RETURN_PLACE the MIR arguments) are always fully normalize (and contain revealed impl Trait values).

liveness [
Experimental
]

Structs

MirTypeckRegionConstraints [
Experimental
]

A collection of region constraints that must be satisfied for the program to be considered well-typed.

OutlivesSet [
Experimental
]

Outlives relationships between regions and types created at a particular point within the control-flow graph.

TypeChecker [
Experimental
]

The MIR type checker. Visits the MIR and enforces all the constraints needed for it to be valid and well-typed. Along the way, it accrues region constraints -- these can later be used by NLL region checking.

TypeVerifier [
Experimental
]

Verifies that MIR types are sane to not crash further checks.

TypeckMir [
Experimental
]

Enums

FieldAccessError [
Experimental
]
Locations [
Experimental
]

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.

Traits

AtLocation [
Experimental
]
ToLocations [
Experimental
]

Functions

mirbug [
Experimental
]
type_check [
Experimental
]

Type checks the given mir in the context of the inference context infcx. Returns any region constraints that have yet to be proven. This result is includes liveness constraints that ensure that regions appearing in the types of all local variables are live at all points where that local variable may later be used.

type_check_internal [
Experimental
]