Fix inconsistent use of substs in trans_unboxing_shim

Substs were not applied when calling `untuple_arguments_if_necessary`.
Just apply them once at the start of the function, rebinding `fty`.
Also change the function to take them by reference since we don't
need to consume them at all.  Closes #18883
This commit is contained in:
Brian Koropoff 2014-11-11 21:24:36 -08:00
parent e82f60eb47
commit 6de477cef8
2 changed files with 8 additions and 7 deletions

View File

@ -253,12 +253,14 @@ pub fn trans_unboxing_shim(bcx: Block,
llshimmedfn: ValueRef,
fty: &ty::BareFnTy,
method_id: ast::DefId,
substs: subst::Substs)
substs: &subst::Substs)
-> ValueRef {
let _icx = push_ctxt("trans_unboxing_shim");
let ccx = bcx.ccx();
let tcx = bcx.tcx();
let fty = fty.subst(tcx, substs);
// Transform the self type to `Box<self_type>`.
let self_type = fty.sig.inputs[0];
let boxed_self_type = ty::mk_uniq(tcx, self_type);
@ -279,8 +281,7 @@ pub fn trans_unboxing_shim(bcx: Block,
abi: fty.abi,
sig: boxed_function_type,
};
let boxed_function_type =
ty::mk_bare_fn(tcx, boxed_function_type).subst(tcx, &substs);
let boxed_function_type = ty::mk_bare_fn(tcx, boxed_function_type);
let function_type = match fty.abi {
synabi::RustCall => {
// We're passing through to a RustCall ABI function, but
@ -301,10 +302,10 @@ pub fn trans_unboxing_shim(bcx: Block,
abi: synabi::Rust,
sig: fake_ty,
};
ty::mk_bare_fn(tcx, fake_ty).subst(tcx, &substs)
ty::mk_bare_fn(tcx, fake_ty)
}
_ => {
ty::mk_bare_fn(tcx, (*fty).clone()).subst(tcx, &substs)
ty::mk_bare_fn(tcx, fty)
}
};

View File

@ -624,7 +624,7 @@ pub fn get_vtable(bcx: Block,
llfn,
&closure_type,
closure_def_id,
substs);
&substs);
}
}
@ -723,7 +723,7 @@ fn emit_vtable_methods(bcx: Block,
fn_ref,
&m.fty,
m_id,
substs.clone());
&substs);
}
Some(fn_ref).into_iter()
}