diff options
| author | bors <bors@rust-lang.org> | 2013-05-28 17:37:57 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-05-28 17:37:57 -0700 |
| commit | e3d0c1eb0e86e04c2a6d5abe526516351cfaef3f (patch) | |
| tree | b0971e4ba3c1a990cdb9f9ee02b3d414b2fd7729 /src/rt/rust_builtin.cpp | |
| parent | 5676056ae6dd3a10d2c7323375ace3ca2fe1c308 (diff) | |
| parent | b7f71e1ee661ea0d5d9731fcf4779a452bbee486 (diff) | |
| download | rust-e3d0c1eb0e86e04c2a6d5abe526516351cfaef3f.tar.gz rust-e3d0c1eb0e86e04c2a6d5abe526516351cfaef3f.zip | |
auto merge of #6731 : thomaslee/rust/issue-6575, r=pcwalton
Fix for #6575. In the trans phase, rustc emits code for a function parameter that goes completely unused in the event the return type of the function in question happens to be an immediate. This patch modifies rustc & parts of rustrt to ensure that the vestigial parameter is no longer present in compiled code.
Diffstat (limited to 'src/rt/rust_builtin.cpp')
| -rw-r--r-- | src/rt/rust_builtin.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index b0a46d2ac29..5e7357c9b7b 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -731,10 +731,17 @@ rust_task_deref(rust_task *task) { // Must call on rust stack. extern "C" CDECL void rust_call_tydesc_glue(void *root, size_t *tydesc, size_t glue_index) { +#ifdef _RUST_STAGE0 void (*glue_fn)(void *, void *, void *, void *) = (void (*)(void *, void *, void *, void *))tydesc[glue_index]; if (glue_fn) glue_fn(0, 0, 0, root); +#else + void (*glue_fn)(void *, void *, void *) = + (void (*)(void *, void *, void *))tydesc[glue_index]; + if (glue_fn) + glue_fn(0, 0, root); +#endif } // Don't run on the Rust stack! @@ -754,7 +761,11 @@ public: virtual void run() { record_sp_limit(0); +#ifdef _RUST_STAGE0 fn.f(NULL, fn.env, NULL); +#else + fn.f(fn.env, NULL); +#endif } }; |
