Skip to content

Commit 97f0332

Browse files
committed
Auto merge of #156027 - jackh726:opaque-liveness, r=<try>
Consider captured regions for opaque type region liveness.
2 parents 0469a92 + 91aa556 commit 97f0332

18 files changed

Lines changed: 402 additions & 128 deletions

compiler/rustc_borrowck/src/type_check/liveness/trace.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use rustc_data_structures::fx::{FxIndexMap, FxIndexSet};
22
use rustc_index::bit_set::DenseBitSet;
33
use rustc_index::interval::IntervalSet;
44
use rustc_infer::infer::canonical::QueryRegionConstraints;
5-
use rustc_infer::infer::outlives::for_liveness;
65
use rustc_middle::mir::{BasicBlock, Body, ConstraintCategory, HasLocalDecls, Local, Location};
76
use rustc_middle::traits::query::DropckOutlivesResult;
87
use rustc_middle::ty::relate::Relate;
@@ -14,6 +13,7 @@ use rustc_mir_dataflow::{Analysis, ResultsCursor};
1413
use rustc_span::{DUMMY_SP, ErrorGuaranteed, Span};
1514
use rustc_trait_selection::error_reporting::InferCtxtErrorExt;
1615
use rustc_trait_selection::traits::ObligationCtxt;
16+
use rustc_trait_selection::traits::outlives_for_liveness::FreeRegionsVisitor;
1717
use rustc_trait_selection::traits::query::dropck_outlives;
1818
use rustc_trait_selection::traits::query::type_op::{DropckOutlives, TypeOp, TypeOpOutput};
1919
use tracing::debug;
@@ -611,7 +611,7 @@ impl<'tcx> LivenessContext<'_, '_, 'tcx> {
611611
values::pretty_print_points(location_map, live_at.iter()),
612612
);
613613

614-
value.visit_with(&mut for_liveness::FreeRegionsVisitor {
614+
value.visit_with(&mut FreeRegionsVisitor {
615615
tcx: typeck.tcx(),
616616
param_env: typeck.infcx.param_env,
617617
op: |r| {

compiler/rustc_infer/src/infer/outlives/for_liveness.rs

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

compiler/rustc_infer/src/infer/outlives/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ use crate::infer::lexical_region_resolve;
1515
use crate::infer::region_constraints::ConstraintKind;
1616

1717
pub mod env;
18-
pub mod for_liveness;
1918
pub mod obligations;
2019
pub mod test_type_match;
2120
pub(crate) mod verify;

compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ provide! { tcx, def_id, other, cdata,
415415
}
416416
anon_const_kind => { table }
417417
const_of_item => { table }
418+
opaque_live_args => { table }
418419
}
419420

420421
pub(in crate::rmeta) fn provide(providers: &mut Providers) {

compiler/rustc_metadata/src/rmeta/encoder.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,6 +1618,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
16181618
record_defaulted_array!(self.tables.explicit_implied_const_bounds[def_id]
16191619
<- tcx.explicit_implied_const_bounds(def_id).skip_binder());
16201620
}
1621+
record!(self.tables.opaque_live_args[def_id] <- tcx.opaque_live_args(def_id));
16211622
}
16221623
if let DefKind::AnonConst = def_kind {
16231624
record!(self.tables.anon_const_kind[def_id] <- self.tcx.anon_const_kind(def_id));

compiler/rustc_metadata/src/rmeta/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,7 @@ define_tables! {
474474
anon_const_kind: Table<DefIndex, LazyValue<ty::AnonConstKind>>,
475475
const_of_item: Table<DefIndex, LazyValue<ty::EarlyBinder<'static, ty::Const<'static>>>>,
476476
associated_types_for_impl_traits_in_trait_or_impl: Table<DefIndex, LazyValue<DefIdMap<Vec<DefId>>>>,
477+
opaque_live_args: Table<DefIndex, LazyValue<ty::EarlyBinder<'static, Vec<ty::GenericArg<'static>>>>>,
477478
}
478479

479480
#[derive(TyEncodable, TyDecodable)]

compiler/rustc_metadata/src/rmeta/parameterized.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::hash::Hash;
33
use rustc_data_structures::unord::UnordMap;
44
use rustc_hir::def_id::DefIndex;
55
use rustc_index::{Idx, IndexVec};
6-
use rustc_middle::ty::{Binder, EarlyBinder};
6+
use rustc_middle::ty::{Binder, EarlyBinder, GenericArg};
77
use rustc_span::Symbol;
88

99
use crate::rmeta::{LazyArray, LazyValue};
@@ -48,6 +48,10 @@ impl<T: ParameterizedOverTcx> ParameterizedOverTcx for LazyArray<T> {
4848
type Value<'tcx> = LazyArray<T::Value<'tcx>>;
4949
}
5050

51+
impl ParameterizedOverTcx for GenericArg<'static> {
52+
type Value<'tcx> = GenericArg<'tcx>;
53+
}
54+
5155
macro_rules! trivially_parameterized_over_tcx {
5256
($($ty:ty),+ $(,)?) => {
5357
$(

compiler/rustc_middle/src/queries.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,6 +2147,12 @@ rustc_queries! {
21472147
desc { "listing captured lifetimes for opaque `{}`", tcx.def_path_str(def_id) }
21482148
}
21492149

2150+
query opaque_live_args(def_id: DefId) -> &'tcx ty::EarlyBinder<'tcx, Vec<ty::GenericArg<'tcx>>> {
2151+
arena_cache
2152+
desc { "identifying live args for opaque `{}`", tcx.def_path_str(def_id) }
2153+
separate_provide_extern
2154+
}
2155+
21502156
/// Computes the visibility of the provided `def_id`.
21512157
///
21522158
/// If the item from the `def_id` doesn't have a visibility, it will panic. For example

compiler/rustc_trait_selection/src/traits/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ mod fulfill;
1212
pub mod misc;
1313
pub mod normalize;
1414
pub mod outlives_bounds;
15+
pub mod outlives_for_liveness;
1516
pub mod project;
1617
pub mod query;
1718
#[allow(hidden_glob_reexports)]
@@ -935,6 +936,7 @@ pub fn provide(providers: &mut Providers) {
935936
specialization_enabled_in: specialize::specialization_enabled_in,
936937
instantiate_and_check_impossible_predicates,
937938
is_impossible_associated_item,
939+
opaque_live_args: outlives_for_liveness::opaque_live_args,
938940
..*providers
939941
};
940942
}

0 commit comments

Comments
 (0)