Project

General

Profile

Actions

Bug #16695

closed

Stack consistency error when using the return value

Bug #16695: Stack consistency error when using the return value

Added by s4ichi (takamasa saichi) over 5 years ago. Updated over 4 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin18]
[ruby-core:97538]

Description

Some versions of ruby occur Stack consistency error by following the reproduction code.

Reproduction code

x = false; y = (return until x unless x) 

Per versions

  • 2.3.8
    • unexpected return (LocalJumpError)
  • 2.4.9
    • no problem
  • 2.5.7, 2.6.5, 2.7.0
    • Stack consistency error

Backtrace (2.7.0p0)

-e:1: [BUG] Stack consistency error (sp: 7, bp: 8) ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin18] -- Crash Report log information -------------------------------------------- See Crash Report log file under the one of following: * ~/Library/Logs/DiagnosticReports * /Library/Logs/DiagnosticReports for more details. Don't forget to include the above Crash Report log file in bug reports. -- Control frame information ----------------------------------------------- c:0002 p:0020 s:0007 E:0004c0 EVAL -e:1 [FINISH] c:0001 p:0000 s:0003 E:002260 (none) [FINISH] -- Ruby level backtrace information ---------------------------------------- -e:1:in `<main>' -- C level backtrace information ------------------------------------------- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib(rb_vm_bugreport+0x96) [0x1058bc6d6] /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib(rb_bug+0xd4) [0x1058c7fae] /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib(vm_stack_consistency_error.cold.1+0x2a) [0x1058ca09a] /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib(vm_stack_consistency_error+0x12) [0x1058b4cd2] /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib(vm_exec_core+0x43cf) [0x105897a3f] /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib(rb_vm_exec+0xa49) [0x1058aa529] /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib(rb_ec_exec_node+0xb6) [0x105715d06] /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib(ruby_run_node+0x55) [0x105715c05] /Users/takamasa-saichi/.rbenv/versions/2.7.0/bin/ruby(main+0x5d) [0x105673f0d] -- Other runtime information ----------------------------------------------- * Loaded script: -e * Loaded features: 0 enumerator.so 1 thread.rb 2 rational.so 3 complex.so 4 ruby2_keywords.rb 5 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 6 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 7 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/rbconfig.rb 8 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/compatibility.rb 9 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/defaults.rb 10 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/deprecate.rb 11 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/errors.rb 12 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/version.rb 13 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/requirement.rb 14 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/platform.rb 15 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/basic_specification.rb 16 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/stub_specification.rb 17 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/util.rb 18 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/text.rb 19 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/user_interaction.rb 20 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/specification_policy.rb 21 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/util/list.rb 22 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/specification.rb 23 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/exceptions.rb 24 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/bundler_version_finder.rb 25 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/dependency.rb 26 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_gem.rb 27 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/monitor.bundle 28 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/monitor.rb 29 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb 30 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/core_ext/kernel_warn.rb 31 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems.rb 32 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/rubygems/path_support.rb 33 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/version.rb 34 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/core_ext/name_error.rb 35 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/levenshtein.rb 36 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/jaro_winkler.rb 37 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/spell_checker.rb 38 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb 39 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb 40 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/spell_checkers/name_error_checkers.rb 41 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/spell_checkers/method_name_checker.rb 42 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/spell_checkers/key_error_checker.rb 43 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/spell_checkers/null_checker.rb 44 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/formatters/plain_formatter.rb 45 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean/tree_spell_checker.rb 46 /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/did_you_mean.rb * Process memory map: 105673000-105674000 r-x /Users/takamasa-saichi/.rbenv/versions/2.7.0/bin/ruby 105674000-105675000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/bin/ruby 105675000-105676000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/bin/ruby 105676000-105678000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib 105678000-105679000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib 105679000-10596b000 r-x /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib 10596b000-105972000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib 105972000-10598a000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib 10598a000-105a73000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib 105a73000-105a74000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105a74000-105a75000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105a75000-105a76000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105a76000-105a7c000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105a7c000-105a7d000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105a7d000-105a7e000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105a7e000-105a84000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105a84000-105a85000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105a85000-105a86000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105a86000-105ac6000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105ac6000-105ae1000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105ae1000-105be1000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105be1000-105be3000 r-x /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105be3000-105be4000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105be4000-105be5000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/encdb.bundle 105be5000-105be6000 r-x /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/monitor.bundle 105be6000-105be7000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/monitor.bundle 105be7000-105be8000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/monitor.bundle 105be8000-107be8000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107be8000-107bfc000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107bfc000-107c14000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107c14000-107c15000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107c15000-107cb6000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107cb6000-107cb7000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107cb7000-107d58000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107d58000-107d59000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107d59000-107dfa000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107dfa000-107dfb000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107dfb000-107e9c000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107e9c000-107e9d000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107e9d000-107f3e000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107f3e000-107f3f000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107f3f000-107fe0000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107fe0000-107fe1000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 107fe1000-108082000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108082000-108083000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108083000-108124000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108124000-108125000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108125000-1081c6000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1081c6000-1081c7000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1081c7000-108268000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108268000-108269000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108269000-10830a000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10830a000-10830b000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10830b000-1083ac000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1083ac000-1083ad000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1083ad000-10844e000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10844e000-10844f000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10844f000-1084f0000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1084f0000-1084f1000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1084f1000-108592000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108592000-108593000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108593000-108634000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108634000-108635000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108635000-1086d6000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1086d6000-1086d7000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1086d7000-108778000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108778000-108779000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108779000-10881a000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10881a000-10881b000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10881b000-1088bc000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1088bc000-1088bd000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 1088bd000-10895e000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10895e000-10895f000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10895f000-108a00000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108a00000-108a01000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108a01000-108aa2000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108aa2000-108aa3000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108aa3000-108b44000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108b44000-108b45000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108b45000-108be6000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108be6000-108be7000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108be7000-108c88000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108c88000-108c89000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108c89000-108d2a000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108d2a000-108d2b000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108d2b000-108dcc000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108dcc000-108dcd000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108dcd000-108e6e000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108e6e000-108e6f000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108e6f000-108f10000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108f10000-108f11000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108f11000-108fb2000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108fb2000-108fb3000 --- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 108fb3000-109054000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 109054000-10906c000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10906c000-10906e000 r-x /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10906e000-10906f000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 10906f000-109070000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/ruby/2.7.0/x86_64-darwin18/enc/trans/transdb.bundle 109070000-10907f000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/bin/ruby 10907f000-109097000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/bin/ruby 109097000-1090b4000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/bin/ruby 1090b4000-1090ed000 rw- /Users/takamasa-saichi/.rbenv/versions/2.7.0/bin/ruby 1090ed000-1090f0000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/bin/ruby 1090f0000-1094d2000 r-- /Users/takamasa-saichi/.rbenv/versions/2.7.0/lib/libruby.2.7.dylib 11382c000-113897000 r-x /usr/lib/dyld 113897000-11389c000 rw- /usr/lib/dyld 11389c000-1138d0000 rw- /usr/lib/dyld 1138d0000-1138f7000 r-- /usr/lib/dyld 7000025f1000-7000025f2000 --- /usr/lib/dyld 7000025f2000-700002674000 rw- /usr/lib/dyld 7fce95400000-7fce95500000 rw- /usr/lib/dyld 7fce95500000-7fce95600000 rw- /usr/lib/dyld 7fce95600000-7fce95700000 rw- /usr/lib/dyld 7fce95700000-7fce95800000 rw- /usr/lib/dyld 7fce95800000-7fce96000000 rw- /usr/lib/dyld 7fce96000000-7fce96800000 rw- /usr/lib/dyld 7fce96800000-7fce96900000 rw- /usr/lib/dyld 7fce96900000-7fce96a00000 rw- /usr/lib/dyld 7fce96a00000-7fce96b00000 rw- /usr/lib/dyld 7fce96b00000-7fce96c00000 rw- /usr/lib/dyld 7fce96c00000-7fce96d00000 rw- /usr/lib/dyld 7fce97000000-7fce97800000 rw- /usr/lib/dyld 7fce97800000-7fce98000000 rw- /usr/lib/dyld 7fce98000000-7fce98800000 rw- /usr/lib/dyld 7fce98800000-7fce99000000 rw- /usr/lib/dyld 7fce99000000-7fce99800000 rw- /usr/lib/dyld 7ffee658d000-7ffee9d8d000 --- /usr/lib/dyld 7ffee9d8d000-7ffeea58d000 rw- /usr/lib/dyld 7fff00000000-7fff80000000 r-- /usr/lib/dyld 7fff80000000-7fff95f59000 r-- /usr/lib/dyld 7fff95f59000-7fff96000000 rw- /usr/lib/dyld 7fff96000000-7fff9c000000 r-- /usr/lib/dyld 7fff9c000000-7fff9c200000 rw- /usr/lib/dyld 7fff9c200000-7fff9c800000 r-- /usr/lib/dyld 7fff9c800000-7fff9ca00000 rw- /usr/lib/dyld 7fff9ca00000-7fff9cc00000 rw- /usr/lib/dyld 7fff9cc00000-7fff9ce00000 rw- /usr/lib/dyld 7fff9ce00000-7fff9d000000 rw- /usr/lib/dyld 7fff9d000000-7fff9d200000 rw- /usr/lib/dyld 7fff9d200000-7fff9d400000 rw- /usr/lib/dyld 7fff9d400000-7fff9e400000 r-- /usr/lib/dyld 7fff9e400000-7fff9e600000 rw- /usr/lib/dyld 7fff9e600000-7fffa0200000 r-- /usr/lib/dyld 7fffa0200000-7fffa0400000 rw- /usr/lib/dyld 7fffa0400000-7fffa1200000 r-- /usr/lib/dyld 7fffa1200000-7fffa1400000 rw- /usr/lib/dyld 7fffa1400000-7fffa3600000 r-- /usr/lib/dyld 7fffa3600000-7fffa3800000 rw- /usr/lib/dyld 7fffa3800000-7fffa3a00000 rw- /usr/lib/dyld 7fffa3a00000-7fffa3c00000 rw- /usr/lib/dyld 7fffa3c00000-7fffa3e00000 rw- /usr/lib/dyld 7fffa3e00000-7fffa4000000 rw- /usr/lib/dyld 7fffa4000000-7fffa402e000 rw- /usr/lib/dyld 7fffa402e000-7fffc0000000 r-- /usr/lib/dyld 7fffc0000000-7fffffe00000 r-- /usr/lib/dyld 7fffffe00000-7fffffe01000 r-- /usr/lib/dyld 7ffffff03000-7ffffff04000 r-x /usr/lib/dyld [IMPORTANT] Don't forget to include the Crash Report log file under DiagnosticReports directory in bug reports. 

Files

ruby_2020-03-18-201902.crash (37.9 KB) ruby_2020-03-18-201902.crash s4ichi (takamasa saichi), 03/18/2020 11:22 AM

Related issues 1 (0 open1 closed)

Updated by nobu (Nobuyoshi Nakada) over 5 years ago Actions #1 [ruby-core:97552]

  • Backport changed from 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN to 2.5: REQUIRED, 2.6: REQUIRED, 2.7: REQUIRED

Thank you for the interesting report.
I confirmed that this has existed since 1.9.1 at least, by wrapping in a method.

$ ruby1.9 -e 'def f;x = false; y = (return until x unless x);end;f' -e:1: [BUG] Stack consistency error (sp: 10, bp: 11) ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-darwin19.0.0] 

Updated by jeremyevans0 (Jeremy Evans) over 5 years ago Actions #2 [ruby-core:98535]

This is due to a bug in the optimizer. Adding return COMPILE_OK; to the top of iseq_peephole_optimize fixes the problem.

Instructions before (optimization/broken):

== disasm: #<ISeq:<main>@-e:1 (1,0)-(1,52)> (catch: FALSE) 0000 definemethod :f, f ( 1)[Li] 0003 putself 0004 opt_send_without_block <calldata!mid:f, argc:0, FCALL|VCALL|ARGS_SIMPLE> 0006 leave == disasm: #<ISeq:f@-e:1 (1,0)-(1,50)> (catch: FALSE) == catch table | catch type: break st: 0017 ed: 0025 sp: 0001 cont: 0025 | catch type: next st: 0017 ed: 0025 sp: 0001 cont: 0014 | catch type: redo st: 0017 ed: 0025 sp: 0001 cont: 0017 |------------------------------------------------------------------------ local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1]) [ 2] x@0 [ 1] y@1 0000 putobject false ( 1)[LiCa] 0002 setlocal_WC_0 x@0 0004 getlocal_WC_0 x@0 0006 branchunless 20 0008 putnil 0009 jump 26 0011 jump 20 0013 putnil 0014 pop 0015 jump 20 0017 pop 0018 putnil 0019 leave [Re] 0020 getlocal_WC_0 x@0 0022 branchunless 17 0024 putnil 0025 nop 0026 dup ( 1) 0027 setlocal_WC_0 y@1 0029 leave [Re] 

Instructions after (no optimization/working):

== disasm: #<ISeq:<main>@t/t29.rb:1 (1,0)-(5,1)> (catch: FALSE) 0000 definemethod :f, f ( 1)[Li] 0003 putself ( 5)[Li] 0004 opt_send_without_block <calldata!mid:f, argc:0, FCALL|VCALL|ARGS_SIMPLE> 0006 leave == disasm: #<ISeq:f@t/t29.rb:1 (1,0)-(4,3)> (catch: FALSE) == catch table | catch type: break st: 0019 ed: 0028 sp: 0000 cont: 0028 | catch type: next st: 0019 ed: 0028 sp: 0000 cont: 0016 | catch type: redo st: 0019 ed: 0028 sp: 0000 cont: 0019 |------------------------------------------------------------------------ local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1]) [ 2] x@0 [ 1] y@1 0000 putobject false ( 2)[LiCa] 0002 setlocal_WC_0 x@0 0004 getlocal_WC_0 x@0 ( 3)[Li] 0006 branchunless 13 0008 jump 10 0010 putnil 0011 jump 29 0013 jump 21 0015 putnil 0016 pop 0017 jump 21 0019 putnil 0020 leave [Re] 0021 getlocal_WC_0 x@0 0023 branchunless 19 0025 jump 27 0027 putnil 0028 nop 0029 dup ( 3) 0030 setlocal_WC_0 y@1 0032 leave ( 4)[Re] 

One thing that jumps out at me is the optimized version uses pop between jump and putnil (instruction 0017). That could be why sp is lower than bp. However, I don't have that much experience reading iseq instructions, so that's more of a guess than anything.

Updated by jeremyevans0 (Jeremy Evans) over 5 years ago Actions #3 [ruby-core:98547]

Through trial and error, I've determined this is caused by the branchif/branchnil/branchunless optimization, self described as a super nasty hack. I've submitted a pull request to disable this optimization (https://github.com/ruby/ruby/pull/3150), and think it should be committed until someone can debug the optimization and fix it (assuming it passes CI).

Updated by wanabe (_ wanabe) over 5 years ago Actions #4 [ruby-core:99447]

How about adjust sp in dead code that is after jump?

diff --git a/compile.c b/compile.c index dfa3802579..85cbd42893 100644 --- a/compile.c +++ b/compile.c @@ -5386,6 +5386,9 @@ compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int branches); end_label = NEW_LABEL(line); ADD_INSNL(then_seq, line, jump, end_label); + if (!popped) { + ADD_INSN(then_seq, line, pop); + }  } ADD_SEQ(ret, then_seq); } 

Updated by wanabe (_ wanabe) over 5 years ago Actions #5 [ruby-core:99448]

Oops, my patch is duplicated at 43c1eb440a7 == r61618 partially so I must revert it at first.

diff --git a/compile.c b/compile.c index dfa3802579..2766e985c3 100644 --- a/compile.c +++ b/compile.c @@ -2836,7 +2836,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal goto again;	} else if (IS_INSN_ID(diobj, leave)) { - INSN *pop;  /* * jump LABEL * ... @@ -2844,7 +2843,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal * leave * => * leave - * pop  * ... * LABEL: * leave @@ -2854,9 +2852,6 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal iobj->insn_id = BIN(leave); iobj->operand_size = 0; iobj->insn_info = diobj->insn_info; - /* adjust stack depth */ - pop = new_insn_body(iseq, diobj->insn_info.line_no, BIN(pop), 0); - ELEM_INSERT_NEXT(&iobj->link, &pop->link);  goto again;	} else if (IS_INSN(iobj->link.prev) && @@ -5386,6 +5381,9 @@ compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int	branches); end_label = NEW_LABEL(line); ADD_INSNL(then_seq, line, jump, end_label); + if (!popped) { + ADD_INSN(then_seq, line, pop); + } 	}	ADD_SEQ(ret, then_seq); }  

Updated by wanabe (_ wanabe) over 5 years ago Actions #6

  • Related to Bug #14273: Stack Consistency Error from return in loop added

Updated by wanabe (_ wanabe) over 5 years ago Actions #7 [ruby-core:99547]

Maybe there are some potential issues.

$ ruby -v -e 'RubyVM::InstructionSequence.compile("def f; return 1 unless true or any; end", peephole_optimization: false).eval' ruby 2.8.0dev (2020-08-02T03:05:19Z wanabe/master ac69849e49) [x86_64-linux] -- raw disasm-------- trace: 8 trace: 1 0000 jump <L000> ( 1) * 0002 branchunless <L001> ( 1) 0004 jump <L000> ( 1) <L000> [sp: 0] 0006 putnil ( 1) 0007 jump <L003> ( 1) <L001> [sp: -1] 0009 putobject_INT2FIX_1_ ( 1) <L003> [sp: -1] trace: 10 0010 leave ( 1) --------------------- <compiled>: <compiled>:1: argument stack underflow (-1) (SyntaxError) 
$ ruby -v -e 'def f; return 1 if false and any; nil; end' ruby 2.8.0dev (2020-08-02T03:05:19Z wanabe/master ac69849e49) [x86_64-linux] -- raw disasm-------- trace: 8 trace: 1 0000 jump <L001> ( 1) * 0002 branchunless <L001> ( 1) <L003> [sp: -1] adjust: [label: -1] 0004 putobject_INT2FIX_1_ ( 1) trace: 10 0005 leave ( 1) adjust: [label: 3] <L001> [sp: 0] 0006 putnil ( 1) trace: 10 0007 leave ( 1) --------------------- -e: -e:1: argument stack underflow (-1) (SyntaxError) 

I sent Pull Request to fix some issues I found.
https://github.com/ruby/ruby/pull/3402

Updated by wanabe (_ wanabe) about 5 years ago Actions #8 [ruby-core:100171]

I rewrited the patch https://github.com/ruby/ruby/pull/3445 on 2020-08-22.
I would appreciate it if someone could review this.

Updated by wanabe (_ wanabe) about 5 years ago Actions #9

  • Status changed from Open to Closed

Applied in changeset git|ce7a053475cbebfb2f3e5ed6614e0ba631541917.


Adjust sp for x = false; y = (return until x unless x) [Bug #16695]

Updated by nagachika (Tomoyuki Chikanaga) over 4 years ago Actions #10 [ruby-core:102454]

  • Backport changed from 2.5: REQUIRED, 2.6: REQUIRED, 2.7: REQUIRED to 2.5: REQUIRED, 2.6: REQUIRED, 2.7: DONE

ruby_2_7 c271c7a225c6175f56f00b785e3034cb4a2b7658 merged revision(s) ce7a053475cbebfb2f3e5ed6614e0ba631541917,1cbb1f1720127b0b34b38c77e27b51b182008699.

Updated by usa (Usaku NAKAMURA) over 4 years ago Actions #11 [ruby-core:103222]

  • Backport changed from 2.5: REQUIRED, 2.6: REQUIRED, 2.7: DONE to 2.5: REQUIRED, 2.6: DONE, 2.7: DONE

backported into ruby_2_6 at r67925

Actions

Also available in: PDF Atom