From: Greg.mpls@... Date: 2018-07-30T20:20:27+00:00 Subject: [ruby-core:88215] [Ruby trunk Bug#14949] test_jit.rb test_unload_units fails on 32-bit Issue #14949 has been updated by MSP-Greg (Greg L). I'm also seeing a lot of error text, 395 items in the errs array. Asserts pass up to the assert_equal at line 562. The matches on errs[10] & errs[11] exist, but they're at 201 & 202 respectively. I've got `rb_mjit_min_header-2.6.0.h`, I can attach it if you'd like, it's about 5 MB in size. Also, to get it to run, I changed the current loop to what's below. Thanks, Greg ```ruby begin; 1.times do |i| eval 'def mjit0 ; print 0 end ; mjit0' eval 'def mjit1 ; print 1 end ; mjit1' eval 'def mjit2 ; print 2 end ; mjit2' eval 'def mjit3 ; print 3 end ; mjit3' eval 'def mjit4 ; print 4 end ; mjit4' eval 'def mjit5 ; print 5 end ; mjit5' eval 'def mjit6 ; print 6 end ; mjit6' eval 'def mjit7 ; print 7 end ; mjit7' eval 'def mjit8 ; print 8 end ; mjit8' eval 'def mjit9 ; print 9 end ; mjit9' end end; ``` ---------------------------------------- Bug #14949: test_jit.rb test_unload_units fails on 32-bit https://bugs.ruby-lang.org/issues/14949#change-73235 * Author: normalperson (Eric Wong) * Status: Open * Priority: Normal * Assignee: k0kubun (Takashi Kokubun) * Target version: * ruby -v: * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- I get multiple definition warnings from this test. It only happens on my 32-bit systems (both VM and real HW) on Debian 9. Attached log was made with below patch: ``` --- a/test/ruby/test_jit.rb +++ b/test/ruby/test_jit.rb @@ -541,32 +541,33 @@ def test_unload_units Dir.mktmpdir("jit_test_unload_units_") do |dir| # MIN_CACHE_SIZE is 10 out, err = eval_with_jit({"TMPDIR"=>dir}, "#{<<~"begin;"}\n#{<<~'end;'}", verbose: 1, min_calls: 1, max_cache: 10) begin; 10.times do |i| eval(<<-EOS) def mjit#{i} print #{i} end mjit#{i} EOS end end; assert_equal('0123456789', out) compactions, errs = err.lines.partition do |l| l.match?(/\AJIT compaction \(\d+\.\dms\): Compacted \d+ methods ->/) end assert_match(/\A#{JIT_SUCCESS_PREFIX}: block in
@-e:/, errs[0]) 9.times do |i| assert_match(/\A#{JIT_SUCCESS_PREFIX}: mjit#{i}@\(eval\):/, errs[i + 1]) end + warn "errs: #{errs.join}" assert_equal("Too many JIT code -- 1 units unloaded\n", errs[10]) assert_match(/\A#{JIT_SUCCESS_PREFIX}: mjit9@\(eval\):/, errs[11]) # On --jit-wait, when the number of JIT-ed code reaches --jit-max-cache, # it should trigger compaction. assert_equal(2, compactions.size) # verify .o files are deleted on unload_units assert_send([Dir, :empty?, dir]) end end ``` ---Files-------------------------------- unload_units.txt (25.2 KB) rb_mjit_header.h (811 KB) mjit_header_i686_native.h (784 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: