Skip to content

Commit d4fa173

Browse files
committed
Fix more chalk lowering issues
- Implement lowering for subtype goals - Use correct lang item for Generator trait - Use `lower_into` for lowering `ty::Variance`
1 parent cb3cff3 commit d4fa173

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

compiler/rustc_traits/src/chalk/db.rs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -546,11 +546,11 @@ impl<'tcx> chalk_solve::RustIrDatabase<RustInterner<'tcx>> for RustIrDatabase<'t
546546
Fn => lang_items.fn_trait(),
547547
FnMut => lang_items.fn_mut_trait(),
548548
FnOnce => lang_items.fn_once_trait(),
549+
Generator => lang_items.gen_trait(),
549550
Unsize => lang_items.unsize_trait(),
550551
Unpin => lang_items.unpin_trait(),
551552
CoerceUnsized => lang_items.coerce_unsized_trait(),
552553
DiscriminantKind => lang_items.discriminant_kind_trait(),
553-
Generator => lang_items.generator_return(),
554554
};
555555
def_id.map(chalk_ir::TraitId)
556556
}
@@ -674,28 +674,18 @@ impl<'tcx> chalk_ir::UnificationDatabase<RustInterner<'tcx>> for RustIrDatabase<
674674
let variances = self.interner.tcx.variances_of(def_id.0);
675675
chalk_ir::Variances::from_iter(
676676
self.interner,
677-
variances.iter().map(|v| match v {
678-
ty::Variance::Invariant => chalk_ir::Variance::Invariant,
679-
ty::Variance::Covariant => chalk_ir::Variance::Covariant,
680-
ty::Variance::Contravariant => chalk_ir::Variance::Contravariant,
681-
ty::Variance::Bivariant => unimplemented!(),
682-
}),
677+
variances.iter().map(|v| v.lower_into(self.interner)),
683678
)
684679
}
685680

686681
fn adt_variance(
687682
&self,
688-
def_id: chalk_ir::AdtId<RustInterner<'tcx>>,
683+
adt_id: chalk_ir::AdtId<RustInterner<'tcx>>,
689684
) -> chalk_ir::Variances<RustInterner<'tcx>> {
690-
let variances = self.interner.tcx.variances_of(def_id.0.did);
685+
let variances = self.interner.tcx.variances_of(adt_id.0.did);
691686
chalk_ir::Variances::from_iter(
692687
self.interner,
693-
variances.iter().map(|v| match v {
694-
ty::Variance::Invariant => chalk_ir::Variance::Invariant,
695-
ty::Variance::Covariant => chalk_ir::Variance::Covariant,
696-
ty::Variance::Contravariant => chalk_ir::Variance::Contravariant,
697-
ty::Variance::Bivariant => unimplemented!(),
698-
}),
688+
variances.iter().map(|v| v.lower_into(self.interner)),
699689
)
700690
}
701691
}

compiler/rustc_traits/src/chalk/lowering.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,18 @@ impl<'tcx> LowerInto<'tcx, chalk_ir::GoalData<RustInterner<'tcx>>> for ty::Predi
188188
chalk_ir::DomainGoal::ObjectSafe(chalk_ir::TraitId(t)),
189189
),
190190

191+
ty::PredicateKind::Subtype(ty::SubtypePredicate { a, b, a_is_expected: _ }) => {
192+
chalk_ir::GoalData::SubtypeGoal(chalk_ir::SubtypeGoal {
193+
a: a.lower_into(interner),
194+
b: b.lower_into(interner),
195+
})
196+
}
197+
191198
// FIXME(chalk): other predicates
192199
//
193200
// We can defer this, but ultimately we'll want to express
194201
// some of these in terms of chalk operations.
195202
ty::PredicateKind::ClosureKind(..)
196-
| ty::PredicateKind::Subtype(..)
197203
| ty::PredicateKind::Coerce(..)
198204
| ty::PredicateKind::ConstEvaluatable(..)
199205
| ty::PredicateKind::ConstEquate(..) => {
@@ -790,6 +796,16 @@ impl<'tcx> LowerInto<'tcx, chalk_solve::rust_ir::Polarity> for ty::ImplPolarity
790796
}
791797
}
792798
}
799+
impl<'tcx> LowerInto<'tcx, chalk_ir::Variance> for ty::Variance {
800+
fn lower_into(self, _interner: RustInterner<'tcx>) -> chalk_ir::Variance {
801+
match self {
802+
ty::Variance::Covariant => chalk_ir::Variance::Covariant,
803+
ty::Variance::Invariant => chalk_ir::Variance::Invariant,
804+
ty::Variance::Contravariant => chalk_ir::Variance::Contravariant,
805+
ty::Variance::Bivariant => unimplemented!(),
806+
}
807+
}
808+
}
793809

794810
impl<'tcx> LowerInto<'tcx, chalk_solve::rust_ir::AliasEqBound<RustInterner<'tcx>>>
795811
for ty::ProjectionPredicate<'tcx>

0 commit comments

Comments
 (0)