From 6de477cef8176481cb39130070dc96e122032713 Mon Sep 17 00:00:00 2001 From: Brian Koropoff Date: Tue, 11 Nov 2014 21:24:36 -0800 Subject: [PATCH] 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 --- src/librustc/middle/trans/callee.rs | 11 ++++++----- src/librustc/middle/trans/meth.rs | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/librustc/middle/trans/callee.rs b/src/librustc/middle/trans/callee.rs index 987866ed243..7a040196ea8 100644 --- a/src/librustc/middle/trans/callee.rs +++ b/src/librustc/middle/trans/callee.rs @@ -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`. 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) } }; diff --git a/src/librustc/middle/trans/meth.rs b/src/librustc/middle/trans/meth.rs index 4ddba0ee839..098b82fe38c 100644 --- a/src/librustc/middle/trans/meth.rs +++ b/src/librustc/middle/trans/meth.rs @@ -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() }