From: Eric Wong <normalperson@...> Date: 2014-10-26T01:30:12+00:00 Subject: [ruby-core:65901] Re: [ruby-trunk - Feature #10423] [Open] [PATCH] opt_str_lit*: avoid literal string allocations It looks like Flonum was hiding my bug in on 64-bit systems :x fix for 32-bit here: --- a/compile.c +++ b/compile.c @@ -5467,7 +5467,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped) ADD_INSN1(ret, line, setn, INT2FIX(3)); } flag = VM_CALL_ARGS_SKIP_SETUP; - ADD_SEND_R(ret, line, node->nd_mid, 2, 0, INT2FIX(flag)); + ADD_SEND_R(ret, line, node->nd_mid, INT2FIX(2), 0, INT2FIX(flag)); ADD_INSN(ret, line, pop); break; } Unfortunately, I still get one failure due to strftime implementation differences on 32 vs 64-bit: 1) Failure: TestRubyOptimization#test_time_opt_str_lit [/home/ew/ruby/test/ruby/test_optimization.rb:406]: Time#strftime. <88837> expected but was <88832>. I'll have to dig into it later (I'm disappointed that 64-bit needs more allocations, even).