Skip to content

Commit 5e53f80

Browse files
authored
Rollup merge of #71449 - ecstatic-morse:free-region-cleanup, r=Mark-Simulacrum
Move `{Free,}RegionRelations` and `FreeRegionMap` to `rustc_infer` ...and out of `rustc_middle`. This is to further #65031, albeit in a very minor way r? @Mark-Simulacrum
2 parents be3faf3 + 46154f2 commit 5e53f80

File tree

12 files changed

+52
-53
lines changed

12 files changed

+52
-53
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3852,6 +3852,7 @@ dependencies = [
38523852
"rustc_session",
38533853
"rustc_span",
38543854
"rustc_target",
3855+
"serialize",
38553856
"smallvec 1.0.0",
38563857
]
38573858

src/librustc_infer/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ rustc_hir = { path = "../librustc_hir" }
1919
rustc_index = { path = "../librustc_index" }
2020
rustc_macros = { path = "../librustc_macros" }
2121
rustc_session = { path = "../librustc_session" }
22+
rustc_serialize = { path = "../libserialize", package = "serialize" }
2223
rustc_span = { path = "../librustc_span" }
2324
rustc_target = { path = "../librustc_target" }
2425
smallvec = { version = "1.0", features = ["union", "may_dangle"] }

src/librustc_middle/ty/free_region_map.rs renamed to src/librustc_infer/infer/free_regions.rs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,47 @@
1-
use crate::ty::{self, Lift, Region, TyCtxt};
1+
//! This module handles the relationships between "free regions", i.e., lifetime parameters.
2+
//! Ordinarily, free regions are unrelated to one another, but they can be related via implied
3+
//! or explicit bounds. In that case, we track the bounds using the `TransitiveRelation` type,
4+
//! and use that to decide when one free region outlives another, and so forth.
5+
26
use rustc_data_structures::transitive_relation::TransitiveRelation;
7+
use rustc_hir::def_id::DefId;
8+
use rustc_middle::middle::region;
9+
use rustc_middle::ty::{self, Lift, Region, TyCtxt};
10+
11+
/// Combines a `region::ScopeTree` (which governs relationships between
12+
/// scopes) and a `FreeRegionMap` (which governs relationships between
13+
/// free regions) to yield a complete relation between concrete
14+
/// regions.
15+
///
16+
/// This stuff is a bit convoluted and should be refactored, but as we
17+
/// transition to NLL, it'll all go away anyhow.
18+
pub struct RegionRelations<'a, 'tcx> {
19+
pub tcx: TyCtxt<'tcx>,
20+
21+
/// The context used to fetch the region maps.
22+
pub context: DefId,
23+
24+
/// The region maps for the given context.
25+
pub region_scope_tree: &'a region::ScopeTree,
26+
27+
/// Free-region relationships.
28+
pub free_regions: &'a FreeRegionMap<'tcx>,
29+
}
30+
31+
impl<'a, 'tcx> RegionRelations<'a, 'tcx> {
32+
pub fn new(
33+
tcx: TyCtxt<'tcx>,
34+
context: DefId,
35+
region_scope_tree: &'a region::ScopeTree,
36+
free_regions: &'a FreeRegionMap<'tcx>,
37+
) -> Self {
38+
Self { tcx, context, region_scope_tree, free_regions }
39+
}
40+
41+
pub fn lub_free_regions(&self, r_a: Region<'tcx>, r_b: Region<'tcx>) -> Region<'tcx> {
42+
self.free_regions.lub_free_regions(self.tcx, r_a, r_b)
43+
}
44+
}
345

446
#[derive(Clone, RustcEncodable, RustcDecodable, Debug, Default, HashStable)]
547
pub struct FreeRegionMap<'tcx> {

src/librustc_infer/infer/lexical_region_resolve/graphviz.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ use graphviz as dot;
1010

1111
use super::Constraint;
1212
use crate::infer::region_constraints::RegionConstraintData;
13+
use crate::infer::RegionRelations;
1314
use crate::infer::SubregionOrigin;
1415
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
1516
use rustc_hir::def_id::DefIndex;
16-
use rustc_middle::middle::free_region::RegionRelations;
1717
use rustc_middle::middle::region;
1818
use rustc_middle::ty;
1919

src/librustc_infer/infer/lexical_region_resolve/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::infer::region_constraints::MemberConstraint;
66
use crate::infer::region_constraints::RegionConstraintData;
77
use crate::infer::region_constraints::VarInfos;
88
use crate::infer::region_constraints::VerifyBound;
9+
use crate::infer::RegionRelations;
910
use crate::infer::RegionVariableOrigin;
1011
use crate::infer::RegionckMode;
1112
use crate::infer::SubregionOrigin;
@@ -14,7 +15,6 @@ use rustc_data_structures::graph::implementation::{
1415
Direction, Graph, NodeIndex, INCOMING, OUTGOING,
1516
};
1617
use rustc_index::vec::{Idx, IndexVec};
17-
use rustc_middle::middle::free_region::RegionRelations;
1818
use rustc_middle::ty::fold::TypeFoldable;
1919
use rustc_middle::ty::{self, Ty, TyCtxt};
2020
use rustc_middle::ty::{ReEarlyBound, ReEmpty, ReErased, ReFree, ReStatic};

src/librustc_infer/infer/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ use rustc_hir::def_id::{DefId, LocalDefId};
1818
use rustc_middle::infer::canonical::{Canonical, CanonicalVarValues};
1919
use rustc_middle::infer::unify_key::{ConstVarValue, ConstVariableValue};
2020
use rustc_middle::infer::unify_key::{ConstVariableOrigin, ConstVariableOriginKind, ToType};
21-
use rustc_middle::middle::free_region::RegionRelations;
2221
use rustc_middle::middle::region;
2322
use rustc_middle::mir;
2423
use rustc_middle::mir::interpret::ConstEvalResult;
@@ -39,6 +38,7 @@ use std::collections::BTreeMap;
3938
use std::fmt;
4039

4140
use self::combine::CombineFields;
41+
use self::free_regions::RegionRelations;
4242
use self::lexical_region_resolve::LexicalRegionResolutions;
4343
use self::outlives::env::OutlivesEnvironment;
4444
use self::region_constraints::{GenericKind, RegionConstraintData, VarInfos, VerifyBound};
@@ -50,6 +50,7 @@ pub mod canonical;
5050
mod combine;
5151
mod equate;
5252
pub mod error_reporting;
53+
pub mod free_regions;
5354
mod freshen;
5455
mod fudge;
5556
mod glb;

src/librustc_infer/infer/outlives/env.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
use crate::infer::free_regions::FreeRegionMap;
12
use crate::infer::{GenericKind, InferCtxt};
23
use crate::traits::query::OutlivesBound;
34
use rustc_data_structures::fx::FxHashMap;
45
use rustc_hir as hir;
56
use rustc_middle::ty;
6-
use rustc_middle::ty::free_region_map::FreeRegionMap;
77

88
use super::explicit_outlives_bounds;
99

src/librustc_middle/middle/free_region.rs

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/librustc_middle/middle/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ pub mod codegen_fn_attrs;
22
pub mod cstore;
33
pub mod dependency_format;
44
pub mod exported_symbols;
5-
pub mod free_region;
65
pub mod lang_items;
76
pub mod lib_features {
87
use rustc_data_structures::fx::{FxHashMap, FxHashSet};

src/librustc_middle/ty/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ pub mod error;
9696
pub mod fast_reject;
9797
pub mod flags;
9898
pub mod fold;
99-
pub mod free_region_map;
10099
pub mod inhabitedness;
101100
pub mod layout;
102101
pub mod normalize_erasing_regions;

src/librustc_mir/borrow_check/type_check/free_region_relations.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use rustc_data_structures::frozen::Frozen;
22
use rustc_data_structures::transitive_relation::TransitiveRelation;
33
use rustc_infer::infer::canonical::QueryRegionConstraints;
4+
use rustc_infer::infer::free_regions::FreeRegionRelations;
45
use rustc_infer::infer::outlives;
56
use rustc_infer::infer::region_constraints::GenericKind;
67
use rustc_infer::infer::InferCtxt;
78
use rustc_middle::mir::ConstraintCategory;
89
use rustc_middle::traits::query::OutlivesBound;
9-
use rustc_middle::ty::free_region_map::FreeRegionRelations;
1010
use rustc_middle::ty::{self, RegionVid, Ty, TyCtxt};
1111
use rustc_span::DUMMY_SP;
1212
use rustc_trait_selection::traits::query::type_op::{self, TypeOp};

src/librustc_trait_selection/opaque_types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ use rustc_hir as hir;
66
use rustc_hir::def_id::{DefId, DefIdMap, LocalDefId};
77
use rustc_hir::Node;
88
use rustc_infer::infer::error_reporting::unexpected_hidden_region_diagnostic;
9+
use rustc_infer::infer::free_regions::FreeRegionRelations;
910
use rustc_infer::infer::type_variable::{TypeVariableOrigin, TypeVariableOriginKind};
1011
use rustc_infer::infer::{self, InferCtxt, InferOk};
1112
use rustc_middle::ty::fold::{BottomUpFolder, TypeFoldable, TypeFolder, TypeVisitor};
12-
use rustc_middle::ty::free_region_map::FreeRegionRelations;
1313
use rustc_middle::ty::subst::{GenericArg, GenericArgKind, InternalSubsts, SubstsRef};
1414
use rustc_middle::ty::{self, GenericParamDefKind, Ty, TyCtxt};
1515
use rustc_session::config::nightly_options;

0 commit comments

Comments
 (0)