Rollup merge of #80593 - jackh726:chalk-upgrade, r=nikomatsakis
Upgrade Chalk ~~Blocked on rust-lang/chalk#670~~ ~~Now blocked on rust-lang/chalk#680 and release~~ In addition to the straight upgrade, I also tried to fix some tests by properly returning variables and max universes in the solution. Unfortunately, this actually triggers the same perf problem that rustc traits code runs into in `canonicalizer`. Not sure what the root cause of this problem is, or why it's supposed to be solved in chalk. r? ```@nikomatsakis```
This commit is contained in:
commit
c1623a2ee7
8 changed files with 174 additions and 39 deletions
|
@ -26,7 +26,7 @@ rustc_index = { path = "../rustc_index" }
|
|||
rustc_serialize = { path = "../rustc_serialize" }
|
||||
rustc_ast = { path = "../rustc_ast" }
|
||||
rustc_span = { path = "../rustc_span" }
|
||||
chalk-ir = "0.36.0"
|
||||
chalk-ir = "0.55.0"
|
||||
smallvec = { version = "1.0", features = ["union", "may_dangle"] }
|
||||
measureme = "9.0.0"
|
||||
rustc_session = { path = "../rustc_session" }
|
||||
|
|
|
@ -72,6 +72,7 @@ impl<'tcx> chalk_ir::interner::Interner for RustInterner<'tcx> {
|
|||
type InternedQuantifiedWhereClauses = Vec<chalk_ir::QuantifiedWhereClause<Self>>;
|
||||
type InternedVariableKinds = Vec<chalk_ir::VariableKind<Self>>;
|
||||
type InternedCanonicalVarKinds = Vec<chalk_ir::CanonicalVarKind<Self>>;
|
||||
type InternedVariances = Vec<chalk_ir::Variance>;
|
||||
type InternedConstraints = Vec<chalk_ir::InEnvironment<chalk_ir::Constraint<Self>>>;
|
||||
type DefId = DefId;
|
||||
type InternedAdtId = &'tcx AdtDef;
|
||||
|
@ -86,17 +87,34 @@ impl<'tcx> chalk_ir::interner::Interner for RustInterner<'tcx> {
|
|||
write!(fmt, "{:?}", pci.consequence)?;
|
||||
|
||||
let conditions = pci.conditions.interned();
|
||||
let constraints = pci.constraints.interned();
|
||||
|
||||
let conds = conditions.len();
|
||||
if conds == 0 {
|
||||
let consts = constraints.len();
|
||||
if conds == 0 && consts == 0 {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
write!(fmt, " :- ")?;
|
||||
for cond in &conditions[..conds - 1] {
|
||||
write!(fmt, "{:?}, ", cond)?;
|
||||
|
||||
if conds != 0 {
|
||||
for cond in &conditions[..conds - 1] {
|
||||
write!(fmt, "{:?}, ", cond)?;
|
||||
}
|
||||
write!(fmt, "{:?}", conditions[conds - 1])?;
|
||||
}
|
||||
write!(fmt, "{:?}", conditions[conds - 1])?;
|
||||
|
||||
if conds != 0 && consts != 0 {
|
||||
write!(fmt, " ; ")?;
|
||||
}
|
||||
|
||||
if consts != 0 {
|
||||
for constraint in &constraints[..consts - 1] {
|
||||
write!(fmt, "{:?}, ", constraint)?;
|
||||
}
|
||||
write!(fmt, "{:?}", constraints[consts - 1])?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
};
|
||||
Some(write())
|
||||
|
@ -351,6 +369,20 @@ impl<'tcx> chalk_ir::interner::Interner for RustInterner<'tcx> {
|
|||
) -> &'a [chalk_ir::InEnvironment<chalk_ir::Constraint<Self>>] {
|
||||
constraints
|
||||
}
|
||||
|
||||
fn intern_variances<E>(
|
||||
&self,
|
||||
data: impl IntoIterator<Item = Result<chalk_ir::Variance, E>>,
|
||||
) -> Result<Self::InternedVariances, E> {
|
||||
data.into_iter().collect::<Result<Vec<_>, _>>()
|
||||
}
|
||||
|
||||
fn variances_data<'a>(
|
||||
&self,
|
||||
variances: &'a Self::InternedVariances,
|
||||
) -> &'a [chalk_ir::Variance] {
|
||||
variances
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> chalk_ir::interner::HasInterner for RustInterner<'tcx> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue