diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | cont.c | 9 | ||||
-rw-r--r-- | version.h | 2 |
3 files changed, 15 insertions, 6 deletions
@@ -1,3 +1,13 @@ +Thu Jan 12 13:52:13 2012 NARUSE, Yui <naruse@ruby-lang.org> + + * cont.c (cont_restore_0): prevent optimizing out `sp'. sp is used for + reserving a memory space with ALLOCA_N for restoring machine stack + stored in cont->machine_stack, but clang optimized out it (and + maybe #5851 is also caused by this). + This affected TestContinuation#test_check_localvars. + + * cont.c (cont_restore_1): revert workaround introduced in r32201. + Thu Jan 12 01:42:08 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com> * test/ruby/test_io.rb (test_autoclose_true_closed_by_finalizer, @@ -669,10 +669,9 @@ cont_restore_1(rb_context_t *cont) } #endif if (cont->machine_stack_src) { - size_t i; FLUSH_REGISTER_WINDOWS; - for (i = 0; i < cont->machine_stack_size; i++) - cont->machine_stack_src[i] = cont->machine_stack[i]; + MEMCPY(cont->machine_stack_src, cont->machine_stack, + VALUE, cont->machine_stack_size); } #ifdef __ia64 @@ -742,7 +741,7 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame) if (&space[0] > end) { # ifdef HAVE_ALLOCA volatile VALUE *sp = ALLOCA_N(VALUE, &space[0] - end); - (void)sp; + space[0] = *sp; # else cont_restore_0(cont, &space[0]); # endif @@ -758,7 +757,7 @@ cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame) if (&space[STACK_PAD_SIZE] < end) { # ifdef HAVE_ALLOCA volatile VALUE *sp = ALLOCA_N(VALUE, end - &space[STACK_PAD_SIZE]); - (void)sp; + space[0] = *sp; # else cont_restore_0(cont, &space[STACK_PAD_SIZE-1]); # endif @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.3" -#define RUBY_PATCHLEVEL 25 +#define RUBY_PATCHLEVEL 26 #define RUBY_RELEASE_DATE "2012-01-13" #define RUBY_RELEASE_YEAR 2012 |