mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 05:51:58 +00:00
update to polonius 0.11 to compute subset errors
- adapt to the new polonius `FactTypes` API - reorganize the type aliases referring to polonius to avoid referencing the inner atom or fact types multiple times: only one input and output types should be enough for everyone. They could equally be in `borrow_check` as `nll` though.
This commit is contained in:
parent
7b482cdf7c
commit
479cc7ae9a
@ -2575,9 +2575,9 @@ checksum = "676e8eb2b1b4c9043511a9b7bea0915320d7e502b0a079fb03f9635a5252b18c"
|
||||
|
||||
[[package]]
|
||||
name = "polonius-engine"
|
||||
version = "0.10.0"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "50fa9dbfd0d3d60594da338cfe6f94028433eecae4b11b7e83fd99759227bbfe"
|
||||
checksum = "1e478d7c38eb785c6416cbe58df12aa55d7aefa3759b6d3e044b2ed03f423cec"
|
||||
dependencies = [
|
||||
"datafrog",
|
||||
"log",
|
||||
|
@ -20,7 +20,7 @@ scoped-tls = "1.0"
|
||||
log = { version = "0.4", features = ["release_max_level_info", "std"] }
|
||||
rustc-rayon = "0.3.0"
|
||||
rustc-rayon-core = "0.3.0"
|
||||
polonius-engine = "0.10.0"
|
||||
polonius-engine = "0.11.0"
|
||||
rustc_apfloat = { path = "../librustc_apfloat" }
|
||||
rustc_feature = { path = "../librustc_feature" }
|
||||
rustc_target = { path = "../librustc_target" }
|
||||
|
@ -16,7 +16,7 @@ dot = { path = "../libgraphviz", package = "graphviz" }
|
||||
itertools = "0.8"
|
||||
log = "0.4"
|
||||
log_settings = "0.1.1"
|
||||
polonius-engine = "0.10.0"
|
||||
polonius-engine = "0.11.0"
|
||||
rustc = { path = "../librustc" }
|
||||
rustc_target = { path = "../librustc_target" }
|
||||
rustc_data_structures = { path = "../librustc_data_structures" }
|
||||
|
@ -3,16 +3,15 @@
|
||||
//! FIXME: this might be better as a "generic" fixed-point combinator,
|
||||
//! but is not as ugly as it is right now.
|
||||
|
||||
use rustc::mir::{BasicBlock, Local, Location};
|
||||
use rustc::ty::RegionVid;
|
||||
use rustc::mir::{BasicBlock, Location};
|
||||
use rustc_index::bit_set::BitIter;
|
||||
|
||||
use crate::borrow_check::location::LocationIndex;
|
||||
|
||||
use polonius_engine::Output;
|
||||
use crate::borrow_check::nll::PoloniusOutput;
|
||||
|
||||
use crate::dataflow::indexes::BorrowIndex;
|
||||
use crate::dataflow::move_paths::{HasMoveData, MovePathIndex};
|
||||
use crate::dataflow::move_paths::HasMoveData;
|
||||
use crate::dataflow::Borrows;
|
||||
use crate::dataflow::EverInitializedPlaces;
|
||||
use crate::dataflow::MaybeUninitializedPlaces;
|
||||
@ -21,8 +20,6 @@ use either::Either;
|
||||
use std::fmt;
|
||||
use std::rc::Rc;
|
||||
|
||||
crate type PoloniusOutput = Output<RegionVid, BorrowIndex, LocationIndex, Local, MovePathIndex>;
|
||||
|
||||
crate struct Flows<'b, 'tcx> {
|
||||
borrows: FlowAtLocation<'tcx, Borrows<'b, 'tcx>>,
|
||||
pub uninits: FlowAtLocation<'tcx, MaybeUninitializedPlaces<'b, 'tcx>>,
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::borrow_check::location::{LocationIndex, LocationTable};
|
||||
use crate::dataflow::indexes::{BorrowIndex, MovePathIndex};
|
||||
use polonius_engine::AllFacts as PoloniusAllFacts;
|
||||
use polonius_engine::AllFacts as PoloniusFacts;
|
||||
use polonius_engine::Atom;
|
||||
use rustc::mir::Local;
|
||||
use rustc::ty::{RegionVid, TyCtxt};
|
||||
@ -11,7 +11,18 @@ use std::fs::{self, File};
|
||||
use std::io::Write;
|
||||
use std::path::Path;
|
||||
|
||||
crate type AllFacts = PoloniusAllFacts<RegionVid, BorrowIndex, LocationIndex, Local, MovePathIndex>;
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
crate struct RustcFacts;
|
||||
|
||||
impl polonius_engine::FactTypes for RustcFacts {
|
||||
type Origin = RegionVid;
|
||||
type Loan = BorrowIndex;
|
||||
type Point = LocationIndex;
|
||||
type Variable = Local;
|
||||
type Path = MovePathIndex;
|
||||
}
|
||||
|
||||
crate type AllFacts = PoloniusFacts<RustcFacts>;
|
||||
|
||||
crate trait AllFactsExt {
|
||||
/// Returns `true` if there is a need to gather `AllFacts` given the
|
||||
|
@ -1,10 +1,9 @@
|
||||
use crate::borrow_check::borrow_set::BorrowSet;
|
||||
use crate::borrow_check::location::{LocationIndex, LocationTable};
|
||||
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::indexes::BorrowIndex;
|
||||
use crate::dataflow::move_paths::{InitLocation, MoveData, MovePathIndex, InitKind};
|
||||
use crate::dataflow::move_paths::{InitLocation, MoveData, InitKind};
|
||||
use crate::dataflow::FlowAtLocation;
|
||||
use crate::dataflow::MaybeInitializedPlaces;
|
||||
use crate::transform::MirSource;
|
||||
@ -43,10 +42,12 @@ crate mod universal_regions;
|
||||
crate mod type_check;
|
||||
crate mod region_infer;
|
||||
|
||||
use self::facts::AllFacts;
|
||||
use self::facts::{AllFacts, RustcFacts};
|
||||
use self::region_infer::RegionInferenceContext;
|
||||
use self::universal_regions::UniversalRegions;
|
||||
|
||||
crate type PoloniusOutput = Output<RustcFacts>;
|
||||
|
||||
/// Rewrites the regions in the MIR to use NLL variables, also
|
||||
/// scraping out the set of universal regions (e.g., region parameters)
|
||||
/// declared on the function. That set will need to be given to
|
||||
@ -170,7 +171,7 @@ pub(in crate::borrow_check) fn compute_regions<'cx, 'tcx>(
|
||||
errors_buffer: &mut Vec<Diagnostic>,
|
||||
) -> (
|
||||
RegionInferenceContext<'tcx>,
|
||||
Option<Rc<Output<RegionVid, BorrowIndex, LocationIndex, Local, MovePathIndex>>>,
|
||||
Option<Rc<PoloniusOutput>>,
|
||||
Option<ClosureRegionRequirements<'tcx>>,
|
||||
) {
|
||||
let mut all_facts = if AllFacts::enabled(infcx.tcx) {
|
||||
|
Loading…
Reference in New Issue
Block a user