Auto merge of #134501 - lcnr:member-constraints-yeet, r=oli-obk
handle member constraints directly in the mir type checker cleaner, faster, easier to change going forward :> fixes #109654 r? `@oli-obk` `@compiler-errors`
This commit is contained in:
commit
9bd5f3387d
15 changed files with 392 additions and 499 deletions
|
@ -123,8 +123,6 @@ impl<'tcx> rustc_next_trait_solver::delegate::SolverDelegate for SolverDelegate<
|
|||
)
|
||||
});
|
||||
|
||||
assert_eq!(region_constraints.member_constraints, vec![]);
|
||||
|
||||
let mut seen = FxHashSet::default();
|
||||
region_constraints
|
||||
.outlives
|
||||
|
|
|
@ -4,11 +4,10 @@ use rustc_infer::infer::resolve::OpportunisticRegionResolver;
|
|||
use rustc_infer::traits::query::type_op::ImpliedOutlivesBounds;
|
||||
use rustc_macros::extension;
|
||||
use rustc_middle::infer::canonical::{OriginalQueryValues, QueryRegionConstraints};
|
||||
use rustc_middle::span_bug;
|
||||
pub use rustc_middle::traits::query::OutlivesBound;
|
||||
use rustc_middle::ty::{self, ParamEnv, Ty, TypeFolder, TypeVisitableExt};
|
||||
use rustc_span::def_id::LocalDefId;
|
||||
use tracing::{debug, instrument};
|
||||
use tracing::instrument;
|
||||
|
||||
use crate::infer::InferCtxt;
|
||||
use crate::traits::{ObligationCause, ObligationCtxt};
|
||||
|
@ -86,16 +85,12 @@ fn implied_outlives_bounds<'a, 'tcx>(
|
|||
bounds.retain(|bound| !bound.has_placeholders());
|
||||
|
||||
if !constraints.is_empty() {
|
||||
debug!(?constraints);
|
||||
if !constraints.member_constraints.is_empty() {
|
||||
span_bug!(span, "{:#?}", constraints.member_constraints);
|
||||
}
|
||||
|
||||
let QueryRegionConstraints { outlives } = constraints;
|
||||
// Instantiation may have produced new inference variables and constraints on those
|
||||
// variables. Process these constraints.
|
||||
let ocx = ObligationCtxt::new(infcx);
|
||||
let cause = ObligationCause::misc(span, body_id);
|
||||
for &constraint in &constraints.outlives {
|
||||
for &constraint in &outlives {
|
||||
ocx.register_obligation(infcx.query_outlives_constraint_to_obligation(
|
||||
constraint,
|
||||
cause.clone(),
|
||||
|
|
|
@ -180,11 +180,8 @@ where
|
|||
span,
|
||||
)?;
|
||||
output.error_info = error_info;
|
||||
if let Some(constraints) = output.constraints {
|
||||
region_constraints
|
||||
.member_constraints
|
||||
.extend(constraints.member_constraints.iter().cloned());
|
||||
region_constraints.outlives.extend(constraints.outlives.iter().cloned());
|
||||
if let Some(QueryRegionConstraints { outlives }) = output.constraints {
|
||||
region_constraints.outlives.extend(outlives.iter().cloned());
|
||||
}
|
||||
output.constraints = if region_constraints.is_empty() {
|
||||
None
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue