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
|
@ -30,7 +30,6 @@ pub use rustc_type_ir as ir;
|
|||
pub use rustc_type_ir::{CanonicalTyVarKind, CanonicalVarKind};
|
||||
use smallvec::SmallVec;
|
||||
|
||||
use crate::infer::MemberConstraint;
|
||||
use crate::mir::ConstraintCategory;
|
||||
use crate::ty::{self, GenericArg, List, Ty, TyCtxt, TypeFlags, TypeVisitableExt};
|
||||
|
||||
|
@ -91,14 +90,13 @@ pub struct QueryResponse<'tcx, R> {
|
|||
#[derive(HashStable, TypeFoldable, TypeVisitable)]
|
||||
pub struct QueryRegionConstraints<'tcx> {
|
||||
pub outlives: Vec<QueryOutlivesConstraint<'tcx>>,
|
||||
pub member_constraints: Vec<MemberConstraint<'tcx>>,
|
||||
}
|
||||
|
||||
impl QueryRegionConstraints<'_> {
|
||||
/// Represents an empty (trivially true) set of region
|
||||
/// constraints.
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.outlives.is_empty() && self.member_constraints.is_empty()
|
||||
self.outlives.is_empty()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,34 +1,2 @@
|
|||
pub mod canonical;
|
||||
pub mod unify_key;
|
||||
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
use rustc_macros::{HashStable, TypeFoldable, TypeVisitable};
|
||||
use rustc_span::Span;
|
||||
|
||||
use crate::ty::{OpaqueTypeKey, Region, Ty};
|
||||
|
||||
/// Requires that `region` must be equal to one of the regions in `choice_regions`.
|
||||
/// We often denote this using the syntax:
|
||||
///
|
||||
/// ```text
|
||||
/// R0 member of [O1..On]
|
||||
/// ```
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
#[derive(HashStable, TypeFoldable, TypeVisitable)]
|
||||
pub struct MemberConstraint<'tcx> {
|
||||
/// The `DefId` and args of the opaque type causing this constraint.
|
||||
/// Used for error reporting.
|
||||
pub key: OpaqueTypeKey<'tcx>,
|
||||
|
||||
/// The span where the hidden type was instantiated.
|
||||
pub definition_span: Span,
|
||||
|
||||
/// The hidden type in which `member_region` appears: used for error reporting.
|
||||
pub hidden_ty: Ty<'tcx>,
|
||||
|
||||
/// The region `R0`.
|
||||
pub member_region: Region<'tcx>,
|
||||
|
||||
/// The options `O1..On`.
|
||||
pub choice_regions: Lrc<Vec<Region<'tcx>>>,
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue