Auto merge of #66886 - mark-i-m:simplify-borrow_check-2, r=matthewjasper
Remove the borrow check::nll submodule NLL is the only borrow checker now, so no need to have a separate submodule. @rustbot modify labels: +S-blocked Waiting on #66815
This commit is contained in:
commit
e9469a6aec
|
@ -1,9 +1,3 @@
|
|||
use crate::borrow_check::borrow_set::BorrowSet;
|
||||
use crate::borrow_check::location::LocationTable;
|
||||
use crate::borrow_check::nll::ToRegionVid;
|
||||
use crate::borrow_check::nll::facts::AllFacts;
|
||||
use crate::borrow_check::nll::region_infer::values::LivenessValues;
|
||||
use crate::borrow_check::places_conflict;
|
||||
use rustc::infer::InferCtxt;
|
||||
use rustc::mir::visit::TyContext;
|
||||
use rustc::mir::visit::Visitor;
|
||||
|
@ -15,6 +9,15 @@ use rustc::ty::fold::TypeFoldable;
|
|||
use rustc::ty::{self, RegionVid, Ty};
|
||||
use rustc::ty::subst::SubstsRef;
|
||||
|
||||
use crate::borrow_check::{
|
||||
borrow_set::BorrowSet,
|
||||
location::LocationTable,
|
||||
nll::ToRegionVid,
|
||||
facts::AllFacts,
|
||||
region_infer::values::LivenessValues,
|
||||
places_conflict,
|
||||
};
|
||||
|
||||
pub(super) fn generate_constraints<'cx, 'tcx>(
|
||||
infcx: &InferCtxt<'cx, 'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
|
@ -1,12 +1,15 @@
|
|||
use crate::borrow_check::nll::type_check::Locations;
|
||||
use crate::borrow_check::nll::constraints::OutlivesConstraintIndex;
|
||||
use crate::borrow_check::nll::constraints::{OutlivesConstraintSet, OutlivesConstraint};
|
||||
use rustc::mir::ConstraintCategory;
|
||||
use rustc::ty::RegionVid;
|
||||
use rustc_data_structures::graph;
|
||||
use rustc_index::vec::IndexVec;
|
||||
use syntax_pos::DUMMY_SP;
|
||||
|
||||
use crate::borrow_check::{
|
||||
type_check::Locations,
|
||||
constraints::OutlivesConstraintIndex,
|
||||
constraints::{OutlivesConstraintSet, OutlivesConstraint},
|
||||
};
|
||||
|
||||
/// The construct graph organizes the constraints by their end-points.
|
||||
/// It can be used to view a `R1: R2` constraint as either an edge `R1
|
||||
/// -> R2` or `R2 -> R1` depending on the direction type `D`.
|
|
@ -1,4 +1,3 @@
|
|||
use crate::borrow_check::nll::type_check::Locations;
|
||||
use rustc::mir::ConstraintCategory;
|
||||
use rustc::ty::RegionVid;
|
||||
use rustc_data_structures::graph::scc::Sccs;
|
||||
|
@ -6,6 +5,8 @@ use rustc_index::vec::{Idx, IndexVec};
|
|||
use std::fmt;
|
||||
use std::ops::Index;
|
||||
|
||||
use crate::borrow_check::type_check::Locations;
|
||||
|
||||
crate mod graph;
|
||||
|
||||
/// A set of NLL region constraints. These include "outlives"
|
|
@ -1,9 +1,7 @@
|
|||
//! Print diagnostics to explain why values are borrowed.
|
||||
|
||||
use std::collections::VecDeque;
|
||||
|
||||
use crate::borrow_check::borrow_set::BorrowData;
|
||||
use crate::borrow_check::nll::region_infer::Cause;
|
||||
use crate::borrow_check::nll::ConstraintDescription;
|
||||
use crate::borrow_check::{MirBorrowckCtxt, WriteKind};
|
||||
use rustc::mir::{
|
||||
CastKind, ConstraintCategory, FakeReadCause, Local, Location, Body, Operand, Place, Rvalue,
|
||||
Statement, StatementKind, TerminatorKind,
|
||||
|
@ -16,6 +14,13 @@ use rustc_errors::DiagnosticBuilder;
|
|||
use syntax_pos::Span;
|
||||
use syntax_pos::symbol::Symbol;
|
||||
|
||||
use crate::borrow_check::{
|
||||
borrow_set::BorrowData,
|
||||
region_infer::Cause,
|
||||
nll::ConstraintDescription,
|
||||
MirBorrowckCtxt, WriteKind,
|
||||
};
|
||||
|
||||
use super::{UseSpans, find_use, RegionName};
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
use std::collections::VecDeque;
|
||||
use std::rc::Rc;
|
||||
|
||||
use crate::borrow_check::nll::region_infer::{Cause, RegionInferenceContext};
|
||||
use crate::borrow_check::nll::ToRegionVid;
|
||||
use crate::borrow_check::{nll::ToRegionVid, region_infer::{Cause, RegionInferenceContext}};
|
||||
use crate::util::liveness::{self, DefUse};
|
||||
use rustc::mir::visit::{MirVisitable, PlaceContext, Visitor};
|
||||
use rustc::mir::{Local, Location, Body};
|
||||
|
|
|
@ -13,7 +13,7 @@ use syntax_pos::symbol::Symbol;
|
|||
|
||||
use smallvec::SmallVec;
|
||||
|
||||
use crate::borrow_check::nll::region_infer::RegionInferenceContext;
|
||||
use crate::borrow_check::region_infer::RegionInferenceContext;
|
||||
|
||||
use super::{
|
||||
RegionName, RegionNameSource, ErrorConstraintInfo, ErrorReportingCtx, RegionErrorNamingCtx,
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
use crate::borrow_check::nll::constraints::OutlivesConstraint;
|
||||
use crate::borrow_check::nll::region_infer::RegionInferenceContext;
|
||||
use crate::borrow_check::nll::type_check::Locations;
|
||||
use crate::borrow_check::nll::universal_regions::DefiningTy;
|
||||
use crate::borrow_check::nll::ConstraintDescription;
|
||||
use crate::borrow_check::Upvar;
|
||||
use crate::util::borrowck_errors;
|
||||
//! Error reporting machinery for lifetime errors.
|
||||
|
||||
use rustc::hir::def_id::DefId;
|
||||
use rustc::infer::error_reporting::nice_region_error::NiceRegionError;
|
||||
use rustc::infer::InferCtxt;
|
||||
|
@ -19,6 +14,17 @@ use syntax::symbol::kw;
|
|||
use syntax_pos::Span;
|
||||
use syntax_pos::symbol::Symbol;
|
||||
|
||||
use crate::util::borrowck_errors;
|
||||
|
||||
use crate::borrow_check::{
|
||||
constraints::OutlivesConstraint,
|
||||
region_infer::RegionInferenceContext,
|
||||
type_check::Locations,
|
||||
universal_regions::DefiningTy,
|
||||
nll::ConstraintDescription,
|
||||
Upvar,
|
||||
};
|
||||
|
||||
use super::{OutlivesSuggestionBuilder, RegionName, RegionNameSource, RegionErrorNamingCtx};
|
||||
|
||||
impl ConstraintDescription for ConstraintCategory {
|
||||
|
|
|
@ -15,14 +15,13 @@ use rustc_data_structures::fx::FxHashMap;
|
|||
use syntax_pos::{Span, symbol::Symbol, DUMMY_SP};
|
||||
|
||||
use crate::borrow_check::{
|
||||
nll::region_infer::RegionInferenceContext,
|
||||
nll::universal_regions::DefiningTy,
|
||||
diagnostics::region_errors::ErrorReportingCtx,
|
||||
region_infer::RegionInferenceContext,
|
||||
universal_regions::DefiningTy,
|
||||
nll::ToRegionVid,
|
||||
Upvar,
|
||||
};
|
||||
|
||||
use super::region_errors::ErrorReportingCtx;
|
||||
|
||||
/// A name for a particular region used in emitting diagnostics. This name could be a generated
|
||||
/// name like `'1`, a name used by the user like `'a`, or a name like `'static`.
|
||||
#[derive(Debug, Clone)]
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
use crate::borrow_check::nll::region_infer::RegionInferenceContext;
|
||||
use crate::borrow_check::nll::ToRegionVid;
|
||||
use crate::borrow_check::{nll::ToRegionVid, region_infer::RegionInferenceContext};
|
||||
use crate::borrow_check::Upvar;
|
||||
use rustc::mir::{Local, Body};
|
||||
use rustc::ty::{RegionVid, TyCtxt};
|
||||
|
|
|
@ -1,14 +1,3 @@
|
|||
use crate::borrow_check::borrow_set::BorrowSet;
|
||||
use crate::borrow_check::location::LocationTable;
|
||||
use crate::borrow_check::{JustWrite, WriteAndRead};
|
||||
use crate::borrow_check::{AccessDepth, Deep, Shallow};
|
||||
use crate::borrow_check::{ReadOrWrite, Activation, Read, Reservation, Write};
|
||||
use crate::borrow_check::{LocalMutationIsAllowed, MutateMode};
|
||||
use crate::borrow_check::ArtificialField;
|
||||
use crate::borrow_check::{ReadKind, WriteKind};
|
||||
use crate::borrow_check::nll::facts::AllFacts;
|
||||
use crate::borrow_check::path_utils::*;
|
||||
use crate::dataflow::indexes::BorrowIndex;
|
||||
use rustc::ty::{self, TyCtxt};
|
||||
use rustc::mir::visit::Visitor;
|
||||
use rustc::mir::{BasicBlock, Location, Body, Place, ReadOnlyBodyAndCache, Rvalue};
|
||||
|
@ -17,6 +6,17 @@ use rustc::mir::TerminatorKind;
|
|||
use rustc::mir::{Operand, BorrowKind};
|
||||
use rustc_data_structures::graph::dominators::Dominators;
|
||||
|
||||
use crate::dataflow::indexes::BorrowIndex;
|
||||
|
||||
use crate::borrow_check::{
|
||||
borrow_set::BorrowSet,
|
||||
location::LocationTable,
|
||||
facts::AllFacts,
|
||||
path_utils::*,
|
||||
JustWrite, WriteAndRead, AccessDepth, Deep, Shallow, ReadOrWrite, Activation, Read,
|
||||
Reservation, Write, LocalMutationIsAllowed, MutateMode, ArtificialField, ReadKind, WriteKind,
|
||||
};
|
||||
|
||||
pub(super) fn generate_invalidates<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
param_env: ty::ParamEnv<'tcx>,
|
|
@ -1,6 +1,5 @@
|
|||
//! This query borrow-checks the MIR to (further) ensure it is not broken.
|
||||
|
||||
use crate::borrow_check::nll::region_infer::RegionInferenceContext;
|
||||
use rustc::hir::{self, HirId};
|
||||
use rustc::hir::Node;
|
||||
use rustc::hir::def_id::DefId;
|
||||
|
@ -41,7 +40,6 @@ use crate::dataflow::{do_dataflow, DebugFormatted};
|
|||
use crate::dataflow::EverInitializedPlaces;
|
||||
use crate::dataflow::{MaybeInitializedPlaces, MaybeUninitializedPlaces};
|
||||
|
||||
use self::borrow_set::{BorrowData, BorrowSet};
|
||||
use self::flows::Flows;
|
||||
use self::location::LocationTable;
|
||||
use self::prefixes::PrefixSet;
|
||||
|
@ -50,17 +48,31 @@ use self::diagnostics::AccessKind;
|
|||
|
||||
use self::path_utils::*;
|
||||
|
||||
crate mod borrow_set;
|
||||
mod diagnostics;
|
||||
mod flows;
|
||||
mod location;
|
||||
mod path_utils;
|
||||
crate mod place_ext;
|
||||
crate mod places_conflict;
|
||||
mod prefixes;
|
||||
mod used_muts;
|
||||
mod constraint_generation;
|
||||
mod facts;
|
||||
mod invalidation;
|
||||
mod renumber;
|
||||
mod member_constraints;
|
||||
mod constraints;
|
||||
mod universal_regions;
|
||||
mod type_check;
|
||||
mod region_infer;
|
||||
mod borrow_set;
|
||||
mod place_ext;
|
||||
mod places_conflict;
|
||||
mod nll;
|
||||
|
||||
pub(crate) mod nll;
|
||||
crate use region_infer::RegionInferenceContext;
|
||||
crate use borrow_set::{BorrowSet, BorrowData};
|
||||
crate use places_conflict::{places_conflict, PlaceConflictBias};
|
||||
crate use place_ext::PlaceExt;
|
||||
crate use nll::ToRegionVid;
|
||||
|
||||
// FIXME(eddyb) perhaps move this somewhere more centrally.
|
||||
#[derive(Debug)]
|
||||
|
|
|
@ -1,13 +1,5 @@
|
|||
use crate::borrow_check::borrow_set::BorrowSet;
|
||||
use crate::borrow_check::location::LocationTable;
|
||||
use crate::borrow_check::nll::facts::AllFactsExt;
|
||||
use crate::borrow_check::nll::type_check::{MirTypeckResults, MirTypeckRegionConstraints};
|
||||
use crate::borrow_check::nll::region_infer::values::RegionValueElements;
|
||||
use crate::dataflow::move_paths::{InitLocation, MoveData, InitKind};
|
||||
use crate::dataflow::FlowAtLocation;
|
||||
use crate::dataflow::MaybeInitializedPlaces;
|
||||
use crate::transform::MirSource;
|
||||
use crate::borrow_check::Upvar;
|
||||
//! The entry point of the NLL borrow checker.
|
||||
|
||||
use rustc::hir::def_id::DefId;
|
||||
use rustc::infer::InferCtxt;
|
||||
use rustc::mir::{ClosureOutlivesSubject, ClosureRegionRequirements,
|
||||
|
@ -27,24 +19,23 @@ use syntax::symbol::sym;
|
|||
|
||||
use self::mir_util::PassWhere;
|
||||
use polonius_engine::{Algorithm, Output};
|
||||
|
||||
use crate::util as mir_util;
|
||||
use crate::util::pretty;
|
||||
use crate::dataflow::move_paths::{InitLocation, MoveData, InitKind};
|
||||
use crate::dataflow::FlowAtLocation;
|
||||
use crate::dataflow::MaybeInitializedPlaces;
|
||||
use crate::transform::MirSource;
|
||||
|
||||
mod constraint_generation;
|
||||
mod facts;
|
||||
mod invalidation;
|
||||
mod renumber;
|
||||
|
||||
mod member_constraints;
|
||||
|
||||
crate mod constraints;
|
||||
crate mod universal_regions;
|
||||
crate mod type_check;
|
||||
crate mod region_infer;
|
||||
|
||||
use self::facts::{AllFacts, RustcFacts};
|
||||
use self::region_infer::RegionInferenceContext;
|
||||
use self::universal_regions::UniversalRegions;
|
||||
use crate::borrow_check::{
|
||||
borrow_set::BorrowSet,
|
||||
location::LocationTable,
|
||||
facts::{AllFacts, AllFactsExt, RustcFacts},
|
||||
region_infer::{RegionInferenceContext, values::RegionValueElements},
|
||||
universal_regions::UniversalRegions,
|
||||
type_check::{self, MirTypeckResults, MirTypeckRegionConstraints},
|
||||
Upvar, renumber, constraint_generation, invalidation,
|
||||
};
|
||||
|
||||
crate type PoloniusOutput = Output<RustcFacts>;
|
||||
|
|
@ -2,11 +2,12 @@
|
|||
//! libgraphviz traits, specialized to attaching borrowck analysis
|
||||
//! data to rendered labels.
|
||||
|
||||
use super::*;
|
||||
use crate::borrow_check::nll::constraints::OutlivesConstraint;
|
||||
use std::borrow::Cow;
|
||||
use std::io::{self, Write};
|
||||
|
||||
use super::*;
|
||||
use crate::borrow_check::constraints::OutlivesConstraint;
|
||||
|
||||
impl<'tcx> RegionInferenceContext<'tcx> {
|
||||
/// Write out the region constraint graph.
|
||||
crate fn dump_graphviz_raw_constraints(&self, mut w: &mut dyn Write) -> io::Result<()> {
|
|
@ -23,29 +23,26 @@ use syntax_pos::Span;
|
|||
use syntax_pos::symbol::Symbol;
|
||||
|
||||
use crate::borrow_check::{
|
||||
nll::{
|
||||
constraints::{
|
||||
graph::NormalConstraintGraph,
|
||||
ConstraintSccIndex,
|
||||
OutlivesConstraint,
|
||||
OutlivesConstraintSet,
|
||||
},
|
||||
member_constraints::{MemberConstraintSet, NllMemberConstraintIndex},
|
||||
region_infer::values::{
|
||||
PlaceholderIndices, RegionElement, ToElementIndex
|
||||
},
|
||||
type_check::{free_region_relations::UniversalRegionRelations, Locations},
|
||||
constraints::{
|
||||
graph::NormalConstraintGraph,
|
||||
ConstraintSccIndex,
|
||||
OutlivesConstraint,
|
||||
OutlivesConstraintSet,
|
||||
},
|
||||
member_constraints::{MemberConstraintSet, NllMemberConstraintIndex},
|
||||
region_infer::values::{
|
||||
PlaceholderIndices, RegionElement, ToElementIndex, LivenessValues, RegionValueElements,
|
||||
RegionValues,
|
||||
},
|
||||
type_check::{free_region_relations::UniversalRegionRelations, Locations},
|
||||
diagnostics::{
|
||||
OutlivesSuggestionBuilder, RegionErrorNamingCtx,
|
||||
},
|
||||
nll::{ToRegionVid, PoloniusOutput},
|
||||
universal_regions::UniversalRegions,
|
||||
Upvar,
|
||||
};
|
||||
|
||||
use self::values::{LivenessValues, RegionValueElements, RegionValues};
|
||||
use super::universal_regions::UniversalRegions;
|
||||
use super::{PoloniusOutput, ToRegionVid};
|
||||
|
||||
mod dump_mir;
|
||||
mod graphviz;
|
||||
|
|
@ -1,8 +1,3 @@
|
|||
use crate::borrow_check::nll::constraints::OutlivesConstraint;
|
||||
use crate::borrow_check::nll::region_infer::TypeTest;
|
||||
use crate::borrow_check::nll::type_check::{Locations, MirTypeckRegionConstraints};
|
||||
use crate::borrow_check::nll::universal_regions::UniversalRegions;
|
||||
use crate::borrow_check::nll::ToRegionVid;
|
||||
use rustc::infer::canonical::QueryRegionConstraints;
|
||||
use rustc::infer::canonical::QueryOutlivesConstraint;
|
||||
use rustc::infer::outlives::env::RegionBoundPairs;
|
||||
|
@ -14,6 +9,14 @@ use rustc::ty::subst::GenericArgKind;
|
|||
use rustc::ty::{self, TyCtxt};
|
||||
use syntax_pos::DUMMY_SP;
|
||||
|
||||
use crate::borrow_check::{
|
||||
constraints::OutlivesConstraint,
|
||||
region_infer::TypeTest,
|
||||
type_check::{Locations, MirTypeckRegionConstraints},
|
||||
universal_regions::UniversalRegions,
|
||||
nll::ToRegionVid,
|
||||
};
|
||||
|
||||
crate struct ConstraintConversion<'a, 'tcx> {
|
||||
infcx: &'a InferCtxt<'a, 'tcx>,
|
||||
tcx: TyCtxt<'tcx>,
|
|
@ -1,7 +1,3 @@
|
|||
use crate::borrow_check::nll::type_check::constraint_conversion;
|
||||
use crate::borrow_check::nll::type_check::{Locations, MirTypeckRegionConstraints};
|
||||
use crate::borrow_check::nll::universal_regions::UniversalRegions;
|
||||
use crate::borrow_check::nll::ToRegionVid;
|
||||
use rustc::infer::canonical::QueryRegionConstraints;
|
||||
use rustc::infer::outlives::free_region_map::FreeRegionRelations;
|
||||
use rustc::infer::region_constraints::GenericKind;
|
||||
|
@ -14,6 +10,13 @@ use rustc_data_structures::transitive_relation::TransitiveRelation;
|
|||
use std::rc::Rc;
|
||||
use syntax_pos::DUMMY_SP;
|
||||
|
||||
use crate::borrow_check::{
|
||||
type_check::constraint_conversion,
|
||||
type_check::{Locations, MirTypeckRegionConstraints},
|
||||
universal_regions::UniversalRegions,
|
||||
nll::ToRegionVid,
|
||||
};
|
||||
|
||||
#[derive(Debug)]
|
||||
crate struct UniversalRegionRelations<'tcx> {
|
||||
universal_regions: Rc<UniversalRegions<'tcx>>,
|
|
@ -7,7 +7,6 @@
|
|||
//! `RETURN_PLACE` the MIR arguments) are always fully normalized (and
|
||||
//! contain revealed `impl Trait` values).
|
||||
|
||||
use crate::borrow_check::nll::universal_regions::UniversalRegions;
|
||||
use rustc::infer::LateBoundRegionConversionTime;
|
||||
use rustc::mir::*;
|
||||
use rustc::ty::Ty;
|
||||
|
@ -15,6 +14,8 @@ use rustc::ty::Ty;
|
|||
use rustc_index::vec::Idx;
|
||||
use syntax_pos::Span;
|
||||
|
||||
use crate::borrow_check::universal_regions::UniversalRegions;
|
||||
|
||||
use super::{Locations, TypeChecker};
|
||||
|
||||
impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
|
|
@ -1,10 +1,12 @@
|
|||
use crate::borrow_check::nll::region_infer::values::{PointIndex, RegionValueElements};
|
||||
use crate::util::liveness::{categorize, DefUse};
|
||||
use rustc::mir::visit::{PlaceContext, Visitor};
|
||||
use rustc::mir::{Local, Location, ReadOnlyBodyAndCache};
|
||||
use rustc_index::vec::{Idx, IndexVec};
|
||||
use rustc_data_structures::vec_linked_list as vll;
|
||||
|
||||
use crate::util::liveness::{categorize, DefUse};
|
||||
|
||||
use crate::borrow_check::region_infer::values::{PointIndex, RegionValueElements};
|
||||
|
||||
/// A map that cross references each local with the locations where it
|
||||
/// is defined (assigned), used, or dropped. Used during liveness
|
||||
/// computation.
|
|
@ -1,17 +1,21 @@
|
|||
use crate::borrow_check::location::LocationTable;
|
||||
use crate::borrow_check::nll::constraints::OutlivesConstraintSet;
|
||||
use crate::borrow_check::nll::facts::{AllFacts, AllFactsExt};
|
||||
use crate::borrow_check::nll::region_infer::values::RegionValueElements;
|
||||
use crate::borrow_check::nll::universal_regions::UniversalRegions;
|
||||
use crate::borrow_check::nll::ToRegionVid;
|
||||
use crate::dataflow::move_paths::MoveData;
|
||||
use crate::dataflow::FlowAtLocation;
|
||||
use crate::dataflow::MaybeInitializedPlaces;
|
||||
use rustc::mir::{Body, Local, ReadOnlyBodyAndCache};
|
||||
use rustc::ty::{RegionVid, TyCtxt};
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use std::rc::Rc;
|
||||
|
||||
use crate::dataflow::move_paths::MoveData;
|
||||
use crate::dataflow::FlowAtLocation;
|
||||
use crate::dataflow::MaybeInitializedPlaces;
|
||||
|
||||
use crate::borrow_check::{
|
||||
location::LocationTable,
|
||||
constraints::OutlivesConstraintSet,
|
||||
facts::{AllFacts, AllFactsExt},
|
||||
region_infer::values::RegionValueElements,
|
||||
universal_regions::UniversalRegions,
|
||||
nll::ToRegionVid,
|
||||
};
|
||||
|
||||
use super::TypeChecker;
|
||||
|
||||
mod local_use_map;
|
|
@ -1,11 +1,3 @@
|
|||
use crate::borrow_check::nll::region_infer::values::{self, PointIndex, RegionValueElements};
|
||||
use crate::borrow_check::nll::type_check::liveness::local_use_map::LocalUseMap;
|
||||
use crate::borrow_check::nll::type_check::liveness::polonius;
|
||||
use crate::borrow_check::nll::type_check::NormalizeLocation;
|
||||
use crate::borrow_check::nll::type_check::TypeChecker;
|
||||
use crate::dataflow::indexes::MovePathIndex;
|
||||
use crate::dataflow::move_paths::MoveData;
|
||||
use crate::dataflow::{FlowAtLocation, FlowsAtLocation, MaybeInitializedPlaces};
|
||||
use rustc::infer::canonical::QueryRegionConstraints;
|
||||
use rustc::mir::{BasicBlock, ConstraintCategory, Local, Location, ReadOnlyBodyAndCache};
|
||||
use rustc::traits::query::dropck_outlives::DropckOutlivesResult;
|
||||
|
@ -16,6 +8,18 @@ use rustc_index::bit_set::HybridBitSet;
|
|||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||
use std::rc::Rc;
|
||||
|
||||
use crate::dataflow::indexes::MovePathIndex;
|
||||
use crate::dataflow::move_paths::MoveData;
|
||||
use crate::dataflow::{FlowAtLocation, FlowsAtLocation, MaybeInitializedPlaces};
|
||||
|
||||
use crate::borrow_check::{
|
||||
region_infer::values::{self, PointIndex, RegionValueElements},
|
||||
type_check::liveness::local_use_map::LocalUseMap,
|
||||
type_check::liveness::polonius,
|
||||
type_check::NormalizeLocation,
|
||||
type_check::TypeChecker,
|
||||
};
|
||||
|
||||
/// This is the heart of the liveness computation. For each variable X
|
||||
/// that requires a liveness computation, it walks over all the uses
|
||||
/// of X and does a reverse depth-first search ("trace") through the
|
|
@ -34,30 +34,32 @@ use rustc_error_codes::*;
|
|||
use rustc_index::vec::{Idx, IndexVec};
|
||||
use syntax_pos::{DUMMY_SP, Span};
|
||||
|
||||
use crate::borrow_check::borrow_set::BorrowSet;
|
||||
use crate::borrow_check::location::LocationTable;
|
||||
use crate::borrow_check::nll::constraints::{OutlivesConstraint, OutlivesConstraintSet};
|
||||
use crate::borrow_check::nll::facts::AllFacts;
|
||||
use crate::borrow_check::nll::member_constraints::MemberConstraintSet;
|
||||
use crate::borrow_check::nll::region_infer::{ClosureRegionRequirementsExt, TypeTest};
|
||||
use crate::borrow_check::nll::region_infer::values::LivenessValues;
|
||||
use crate::borrow_check::nll::region_infer::values::PlaceholderIndex;
|
||||
use crate::borrow_check::nll::region_infer::values::PlaceholderIndices;
|
||||
use crate::borrow_check::nll::region_infer::values::RegionValueElements;
|
||||
use crate::borrow_check::nll::renumber;
|
||||
use crate::borrow_check::nll::ToRegionVid;
|
||||
use crate::borrow_check::nll::type_check::free_region_relations::{
|
||||
CreateResult, UniversalRegionRelations,
|
||||
};
|
||||
use crate::borrow_check::nll::universal_regions::{DefiningTy, UniversalRegions};
|
||||
use crate::dataflow::FlowAtLocation;
|
||||
use crate::dataflow::MaybeInitializedPlaces;
|
||||
use crate::dataflow::move_paths::MoveData;
|
||||
use crate::transform::promote_consts::should_suggest_const_in_array_repeat_expressions_attribute;
|
||||
|
||||
use crate::borrow_check::{
|
||||
borrow_set::BorrowSet,
|
||||
location::LocationTable,
|
||||
constraints::{OutlivesConstraintSet, OutlivesConstraint},
|
||||
member_constraints::MemberConstraintSet,
|
||||
facts::AllFacts,
|
||||
region_infer::values::{
|
||||
LivenessValues, PlaceholderIndex, PlaceholderIndices, RegionValueElements,
|
||||
},
|
||||
region_infer::{ClosureRegionRequirementsExt, TypeTest},
|
||||
type_check::free_region_relations::{
|
||||
CreateResult, UniversalRegionRelations,
|
||||
},
|
||||
universal_regions::{DefiningTy, UniversalRegions},
|
||||
nll::ToRegionVid,
|
||||
renumber,
|
||||
};
|
||||
|
||||
macro_rules! span_mirbug {
|
||||
($context:expr, $elem:expr, $($message:tt)*) => ({
|
||||
$crate::borrow_check::nll::type_check::mirbug(
|
||||
$crate::borrow_check::type_check::mirbug(
|
||||
$context.tcx(),
|
||||
$context.last_span,
|
||||
&format!(
|
|
@ -1,5 +1,3 @@
|
|||
use crate::borrow_check::nll::constraints::OutlivesConstraint;
|
||||
use crate::borrow_check::nll::type_check::{BorrowCheckContext, Locations};
|
||||
use rustc::infer::nll_relate::{TypeRelating, TypeRelatingDelegate, NormalizationStrategy};
|
||||
use rustc::infer::{InferCtxt, NLLRegionVariableOrigin};
|
||||
use rustc::mir::ConstraintCategory;
|
||||
|
@ -8,6 +6,9 @@ use rustc::traits::DomainGoal;
|
|||
use rustc::ty::relate::TypeRelation;
|
||||
use rustc::ty::{self, Ty};
|
||||
|
||||
use crate::borrow_check::constraints::OutlivesConstraint;
|
||||
use crate::borrow_check::type_check::{BorrowCheckContext, Locations};
|
||||
|
||||
/// Adds sufficient constraints to ensure that `a R b` where `R` depends on `v`:
|
||||
///
|
||||
/// - "Covariant" `a <: b`
|
|
@ -25,7 +25,7 @@ use rustc_index::vec::{Idx, IndexVec};
|
|||
use rustc_errors::DiagnosticBuilder;
|
||||
use std::iter;
|
||||
|
||||
use super::ToRegionVid;
|
||||
use crate::borrow_check::nll::ToRegionVid;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct UniversalRegions<'tcx> {
|
|
@ -1,6 +1,3 @@
|
|||
use crate::borrow_check::borrow_set::{BorrowSet, BorrowData};
|
||||
use crate::borrow_check::place_ext::PlaceExt;
|
||||
|
||||
use rustc::mir::{self, Location, Place, PlaceBase, Body};
|
||||
use rustc::ty::{self, TyCtxt};
|
||||
use rustc::ty::RegionVid;
|
||||
|
@ -9,10 +6,11 @@ use rustc_index::bit_set::BitSet;
|
|||
use rustc_data_structures::fx::FxHashMap;
|
||||
use rustc_index::vec::{Idx, IndexVec};
|
||||
|
||||
use crate::borrow_check::{
|
||||
ToRegionVid, BorrowSet, BorrowData, RegionInferenceContext, PlaceExt, PlaceConflictBias,
|
||||
places_conflict,
|
||||
};
|
||||
use crate::dataflow::{BitDenotation, BottomValue, GenKillSet};
|
||||
use crate::borrow_check::nll::region_infer::RegionInferenceContext;
|
||||
use crate::borrow_check::nll::ToRegionVid;
|
||||
use crate::borrow_check::places_conflict;
|
||||
|
||||
use std::rc::Rc;
|
||||
|
||||
|
@ -221,13 +219,13 @@ impl<'a, 'tcx> Borrows<'a, 'tcx> {
|
|||
// locations.
|
||||
let definitely_conflicting_borrows = other_borrows_of_local
|
||||
.filter(|&&i| {
|
||||
places_conflict::places_conflict(
|
||||
places_conflict(
|
||||
self.tcx,
|
||||
self.param_env,
|
||||
self.body,
|
||||
&self.borrow_set.borrows[i].borrowed_place,
|
||||
place,
|
||||
places_conflict::PlaceConflictBias::NoOverlap)
|
||||
PlaceConflictBias::NoOverlap)
|
||||
});
|
||||
|
||||
trans.kill_all(definitely_conflicting_borrows);
|
||||
|
|
Loading…
Reference in New Issue