diff options
| author | Michael Woerister <michaelwoerister@posteo.net> | 2016-10-04 16:15:37 -0400 |
|---|---|---|
| committer | Michael Woerister <michaelwoerister@posteo.net> | 2016-10-04 16:15:37 -0400 |
| commit | 2d34ad04ef6a2a5b69da24ed6b7b2c9f38e4678f (patch) | |
| tree | 129d2dd2144a76acce38d575595d97441c330d4f | |
| parent | 457019967bd2be3ce20b71e6d0beb3897b0a10eb (diff) | |
trans: Make sure that each FnOnce shim is only translated once.
| -rw-r--r-- | src/librustc_trans/closure.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/librustc_trans/closure.rs b/src/librustc_trans/closure.rs index d506b47407d..c87497384ad 100644 --- a/src/librustc_trans/closure.rs +++ b/src/librustc_trans/closure.rs @@ -217,6 +217,10 @@ fn trans_fn_once_adapter_shim<'a, 'tcx>( llreffn: ValueRef) -> ValueRef { + if let Some(&llfn) = ccx.instances().borrow().get(&method_instance) { + return llfn; + } + debug!("trans_fn_once_adapter_shim(closure_def_id={:?}, substs={:?}, llreffn={:?})", closure_def_id, substs, Value(llreffn)); @@ -312,5 +316,7 @@ fn trans_fn_once_adapter_shim<'a, 'tcx>( fcx.finish(bcx, DebugLoc::None); + ccx.instances().borrow_mut().insert(method_instance, lloncefn); + lloncefn } |
