Skip to content

Commit 0cccb99

Browse files
committed
minor fixups as per PR feedback
1 parent 251b92a commit 0cccb99

File tree

2 files changed

+17
-32
lines changed
  • compiler
    • rustc_mir_transform/src
    • rustc_trait_selection/src/traits/select

2 files changed

+17
-32
lines changed

compiler/rustc_mir_transform/src/shim.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -535,17 +535,16 @@ impl<'tcx> CloneShimBuilder<'tcx> {
535535
let variant_index = VariantIdx::new(index);
536536
let dest = self.tcx.mk_place_downcast_unnamed(dest, variant_index);
537537
let src = self.tcx.mk_place_downcast_unnamed(src, variant_index);
538-
let start_block = self.block_index_offset(0);
539538
let clone_block = self.block_index_offset(1);
540-
cases.push((index as u128, start_block));
541-
self.block(
539+
let start_block = self.block(
542540
vec![self.make_statement(StatementKind::SetDiscriminant {
543541
place: Box::new(Place::return_place()),
544542
variant_index,
545543
})],
546544
TerminatorKind::Goto { target: clone_block },
547545
false,
548546
);
547+
cases.push((index as u128, start_block));
549548
let _final_cleanup_block = self.clone_fields(dest, src, target, unwind, state_tys);
550549
}
551550
let discr_ty = substs.discr_ty(self.tcx);

compiler/rustc_trait_selection/src/traits/select/mod.rs

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1902,15 +1902,15 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
19021902
self.infcx.shallow_resolve(substs.as_generator().tupled_upvars_ty());
19031903
let resolved_witness =
19041904
self.infcx.shallow_resolve(substs.as_generator().witness());
1905-
if {
1906-
matches!(resolved_upvars.kind(), ty::Infer(ty::TyVar(_)))
1907-
|| matches!(resolved_witness.kind(), ty::Infer(ty::TyVar(_)))
1908-
} {
1905+
if resolved_upvars.is_ty_var() || resolved_witness.is_ty_var() {
19091906
// Not yet resolved.
19101907
Ambiguous
19111908
} else {
1912-
let mut all = substs.as_generator().upvar_tys().collect::<Vec<_>>();
1913-
all.push(substs.as_generator().witness());
1909+
let all = substs
1910+
.as_generator()
1911+
.upvar_tys()
1912+
.chain(iter::once(substs.as_generator().witness()))
1913+
.collect::<Vec<_>>();
19141914
Where(obligation.predicate.rebind(all))
19151915
}
19161916
} else {
@@ -1920,31 +1920,17 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
19201920

19211921
ty::GeneratorWitness(binder) => {
19221922
let witness_tys = binder.skip_binder();
1923-
let mut iter = witness_tys.iter();
1924-
loop {
1925-
match iter.next() {
1926-
Some(witness_ty) => {
1927-
let resolved = self.infcx.shallow_resolve(witness_ty);
1928-
if matches!(resolved.kind(), ty::Infer(ty::TyVar(_))) {
1929-
break Ambiguous;
1930-
}
1931-
}
1932-
Option::None => {
1933-
// (*) binder moved here
1934-
let all_vars = self.tcx().mk_bound_variable_kinds(
1935-
obligation
1936-
.predicate
1937-
.bound_vars()
1938-
.iter()
1939-
.chain(binder.bound_vars().iter()),
1940-
);
1941-
break Where(ty::Binder::bind_with_vars(
1942-
witness_tys.to_vec(),
1943-
all_vars,
1944-
));
1945-
}
1923+
for witness_ty in witness_tys.iter() {
1924+
let resolved = self.infcx.shallow_resolve(witness_ty);
1925+
if resolved.is_ty_var() {
1926+
return Ambiguous;
19461927
}
19471928
}
1929+
// (*) binder moved here
1930+
let all_vars = self.tcx().mk_bound_variable_kinds(
1931+
obligation.predicate.bound_vars().iter().chain(binder.bound_vars().iter()),
1932+
);
1933+
Where(ty::Binder::bind_with_vars(witness_tys.to_vec(), all_vars))
19481934
}
19491935

19501936
ty::Closure(_, substs) => {

0 commit comments

Comments
 (0)