ruby-changes:20153
From: naruse <ko1@a...>
Date: Wed, 22 Jun 2011 20:00:36 +0900 (JST)
Subject: [ruby-changes:20153] naruse:r32201 (trunk): * cont.c (cont_capture): add volatile.
naruse 2011-06-22 20:00:24 +0900 (Wed, 22 Jun 2011) New Revision: 32201 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32201 Log: * cont.c (cont_capture): add volatile. On clang -O, it is needed to avoid the optimization. With this and llvm/clang's recent fix, clang 3.0 can build ruby-trunk with -O option. * cont.c (cont_capture): use for-loop. * array.c (rb_ary_each): add volatile and use it. * vm_insnhelper.c (vm_call_cfunc): ditto. Modified files: trunk/ChangeLog trunk/array.c trunk/cont.c trunk/vm_insnhelper.c Index: array.c =================================================================== --- array.c (revision 32200) +++ array.c (revision 32201) @@ -1468,9 +1468,10 @@ */ VALUE -rb_ary_each(VALUE ary) +rb_ary_each(VALUE array) { long i; + volatile VALUE ary = array; RETURN_ENUMERATOR(ary, 0, 0); for (i=0; i<RARRAY_LEN(ary); i++) { Index: ChangeLog =================================================================== --- ChangeLog (revision 32200) +++ ChangeLog (revision 32201) @@ -1,3 +1,16 @@ +Wed Jun 22 19:47:03 2011 NARUSE, Yui <naruse@r...> + + * cont.c (cont_capture): add volatile. + On clang -O, it is needed to avoid the optimization. + With this and llvm/clang's recent fix, clang 3.0 can + build ruby-trunk with -O option. + + * cont.c (cont_capture): use for-loop. + + * array.c (rb_ary_each): add volatile and use it. + + * vm_insnhelper.c (vm_call_cfunc): ditto. + Wed Jun 22 18:20:46 2011 Hiroshi Nakamura <nahi@r...> * ext/openssl/ossl_ssl.c (ossl_sslctx_session_remove_cb): Index: cont.c =================================================================== --- cont.c (revision 32200) +++ cont.c (revision 32201) @@ -437,7 +437,7 @@ cont_save_machine_stack(th, cont); if (ruby_setjmp(cont->jmpbuf)) { - VALUE value; + volatile VALUE value; value = cont->value; if (cont->argc == -1) rb_exc_raise(value); @@ -654,9 +654,10 @@ } #endif if (cont->machine_stack_src) { + size_t i; FLUSH_REGISTER_WINDOWS; - MEMCPY(cont->machine_stack_src, cont->machine_stack, - VALUE, cont->machine_stack_size); + for (i = 0; i < cont->machine_stack_size; i++) + cont->machine_stack_src[i] = cont->machine_stack[i]; } #ifdef __ia64 Index: vm_insnhelper.c =================================================================== --- vm_insnhelper.c (revision 32200) +++ vm_insnhelper.c (revision 32201) @@ -386,11 +386,11 @@ } static inline VALUE -vm_call_cfunc(rb_thread_t *th, rb_control_frame_t *reg_cfp, +vm_call_cfunc(rb_thread_t *th, volatile rb_control_frame_t *reg_cfp, int num, VALUE recv, const rb_block_t *blockptr, const rb_method_entry_t *me) { - VALUE val = 0; + volatile VALUE val = 0; const rb_method_definition_t *def = me->def; rb_control_frame_t *cfp; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/