Auto merge of #96883 - jackh726:early-binder-2, r=oli-obk
Add EarlyBinder Chalk has no concept of `Param` (e0ade19d13/chalk-ir/src/lib.rs (L579)
) or `ReEarlyBound` (e0ade19d13/chalk-ir/src/lib.rs (L1308)
). Everything is just "bound" - the equivalent of rustc's late-bound. It's not completely clear yet whether to move everything to the same time of binder in rustc or add `Param` and `ReEarlyBound` in Chalk. Either way, tracking when we have or haven't already substituted out these in rustc can be helpful. As a first step, I'm just adding a `EarlyBinder` newtype that is required to call `subst`. I also add a couple "transparent" `bound_*` wrappers around a couple query that are often immediately substituted. r? `@nikomatsakis`
This commit is contained in:
commit
2a8a0fc423
67 changed files with 400 additions and 217 deletions
|
@ -834,7 +834,7 @@ fn trait_method<'tcx>(
|
|||
.find(|item| item.kind == ty::AssocKind::Fn)
|
||||
.expect("trait method not found");
|
||||
|
||||
let method_ty = tcx.type_of(item.def_id);
|
||||
let method_ty = tcx.bound_type_of(item.def_id);
|
||||
let method_ty = method_ty.subst(tcx, substs);
|
||||
|
||||
ConstantKind::zero_sized(method_ty)
|
||||
|
|
|
@ -177,7 +177,7 @@ fn mir_build(tcx: TyCtxt<'_>, def: ty::WithOptConstParam<LocalDefId>) -> Body<'_
|
|||
let ty = if fn_sig.c_variadic && index == fn_sig.inputs().len() {
|
||||
let va_list_did = tcx.require_lang_item(LangItem::VaList, Some(arg.span));
|
||||
|
||||
tcx.type_of(va_list_did).subst(tcx, &[tcx.lifetimes.re_erased.into()])
|
||||
tcx.bound_type_of(va_list_did).subst(tcx, &[tcx.lifetimes.re_erased.into()])
|
||||
} else {
|
||||
fn_sig.inputs()[index]
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue