diff options
| author | Eric Holk <eholk@mozilla.com> | 2011-05-23 19:29:45 -0700 |
|---|---|---|
| committer | Eric Holk <eholk@mozilla.com> | 2011-05-27 15:20:58 -0700 |
| commit | dad426419c1c93a90d458d8eee307df7ddb0fc05 (patch) | |
| tree | d13d895aa04d101d73f7fa6cc3554861c45662d0 | |
| parent | bb4c7a9c6818bef1851639f03bb3b5b5a90dd45f (diff) | |
| download | rust-dad426419c1c93a90d458d8eee307df7ddb0fc05.tar.gz rust-dad426419c1c93a90d458d8eee307df7ddb0fc05.zip | |
Working on 2 argument spawn. The arguments seem to be copied correctly once, but then they get lost.
| -rw-r--r-- | src/comp/middle/trans.rs | 4 | ||||
| -rw-r--r-- | src/rt/rust_task.cpp | 8 | ||||
| -rw-r--r-- | src/test/run-pass/spawn2.rs | 15 |
3 files changed, 22 insertions, 5 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs index 8f2f2f2db1b..1790ef553f3 100644 --- a/src/comp/middle/trans.rs +++ b/src/comp/middle/trans.rs @@ -5882,9 +5882,7 @@ fn trans_spawn(&@block_ctxt cx, e)); } - // Make the tuple. We have to reverse the types first though. - //vec::reverse[ty::t](arg_tys); - //vec::reverse[ValueRef](arg_vals); + // Make the tuple. auto args_ty = ty::mk_imm_tup(cx.fcx.lcx.ccx.tcx, arg_tys); // Allocate and fill the tuple. diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index e937bd42ffc..e18259fba60 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -171,7 +171,12 @@ rust_task::start(uintptr_t spawnee_fn, src += 1; // spawn-call task slot src += 1; // spawn-call closure-or-obj slot - *spp-- = (uintptr_t) *src; // vec + spp -= (args_size / sizeof(uintptr_t)) - 1; + memmove(spp, src, args_size); + spp--; + + //*spp-- = (uintptr_t) *src; // vec + *spp-- = (uintptr_t) 0x0; // closure-or-obj *spp-- = (uintptr_t) this; // task *spp-- = (uintptr_t) dummy_ret; // output address @@ -179,7 +184,6 @@ rust_task::start(uintptr_t spawnee_fn, I(dom, spp == align_down(spp)); *spp-- = (uintptr_t) (uintptr_t) spawnee_fn; - *spp-- = (uintptr_t) 0x0; // retp *spp-- = (uintptr_t) rust_new_exit_task_glue; diff --git a/src/test/run-pass/spawn2.rs b/src/test/run-pass/spawn2.rs new file mode 100644 index 00000000000..eca1de89ae0 --- /dev/null +++ b/src/test/run-pass/spawn2.rs @@ -0,0 +1,15 @@ +// xfail-stage0 +// xfail-stage1 +// xfail-stage2 +// -*- rust -*- + +use std; + +fn main() { + spawn child(10, 20); +} + +fn child(int i, int j) { + log_err i; + log_err j; +} |
