Skip to content

Reverse-sync &nil block handling#3926

Merged
Earlopain merged 2 commits intoruby:mainfrom
Earlopain:reverse-sync-nil-block
Feb 16, 2026
Merged

Reverse-sync &nil block handling#3926
Earlopain merged 2 commits intoruby:mainfrom
Earlopain:reverse-sync-nil-block

Conversation

@Earlopain
Copy link
Collaborator

ruby/ruby#11065
https://bugs.ruby-lang.org/issues/19979

Co-authored-by: Ufuk Kayserilioglu <ufuk.kayserilioglu@shopify.com>
@Earlopain Earlopain force-pushed the reverse-sync-nil-block branch from 58aa74a to d2d44d1 Compare February 16, 2026 07:56
@Earlopain Earlopain force-pushed the reverse-sync-nil-block branch from d2d44d1 to 8aad248 Compare February 16, 2026 08:03
@Earlopain Earlopain merged commit 7c16f77 into ruby:main Feb 16, 2026
67 checks passed
@Earlopain
Copy link
Collaborator Author

Earlopain commented Feb 16, 2026

Hm, I wanted to build on top of this but tests don't actually succeed locally anymore. I get some unrelated failures first and eventually it segfaults on test_source_encoding while parsing { __ENCODING__ => 1 }.

I played around with it a bit and seems it's caused by changing the type of ParametersNode block.

Segfault

/home/user/code/ruby-prism/bin/prism:422: [BUG] Segmentation fault at 0x0000000000000000
ruby 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0006 p:---- s:0030 e:000029 l:y b:---- CFUNC  :parse_file
c:0005 p:0107 s:0024 e:000023 l:y b:0001 METHOD /home/user/code/ruby-prism/bin/prism:422
c:0004 p:0005 s:0018 e:000017 l:y b:0001 METHOD /home/user/code/ruby-prism/bin/prism:250
c:0003 p:0194 s:0011 e:000010 l:y b:0001 METHOD /home/user/code/ruby-prism/bin/prism:20
c:0002 p:0047 s:0006 e:000005 l:n b:---- EVAL   /home/user/code/ruby-prism/bin/prism:444 [FINISH]
c:0001 p:0000 s:0003 E:001420 l:y b:---- DUMMY  [FINISH]

-- Ruby level backtrace information ----------------------------------------
/home/user/code/ruby-prism/bin/prism:444:in '<main>'
/home/user/code/ruby-prism/bin/prism:20:in 'run'
/home/user/code/ruby-prism/bin/prism:250:in 'parse'
/home/user/code/ruby-prism/bin/prism:422:in 'parse_source'
/home/user/code/ruby-prism/bin/prism:422:in 'parse_file'

-- Threading information ---------------------------------------------------
Total ractor count: 1
Ruby thread count for this ractor: 1

-- Machine register context ------------------------------------------------
 RIP: 0x0000732de24ba340 RBP: 0x000062f381d5c770 RSP: 0x00007fffe5c44a18
 RAX: 0x0000000000000000 RBX: 0x00007fffe5c44de0 RCX: 0x000000009747b28c
 RDX: 0x0000000000000000 RDI: 0x0000000000000000 RSI: 0x0000000000000041
  R8: 0x0000000000000040  R9: 0x0000000000000010 R10: 0x0000000000000000
 R11: 0x0000732dfdcc6f30 R12: 0x0000000000000001 R13: 0x0000000000000003
 R14: 0x0000000000000002 R15: 0x00007fffe5c45020 EFL: 0x0000000000010212

-- C level backtrace information -------------------------------------------
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(rb_print_backtrace+0x5) [0x732dfe3b25d6] /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/vm_dump.c:1105
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(rb_vm_bugreport) /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/vm_dump.c:1450
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(rb_bug_for_fatal_signal+0x105) [0x732dfe161255] /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/error.c:1131
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(sigsegv+0x44) [0x732dfe2de244] /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/signal.c:948
/usr/lib/libc.so.6(0x732dfdc5d4d0) [0x732dfdc5d4d0]
/home/user/code/ruby-prism/lib/prism/prism.so(murmur_hash+0x40) [0x732de24ba340] ../../../../ext/prism/../../src/static_literals.c:37
/home/user/code/ruby-prism/lib/prism/prism.so(pm_node_hash_insert+0x76) [0x732de24bad01] ../../../../ext/prism/../../src/static_literals.c:193
/home/user/code/ruby-prism/lib/prism/prism.so(pm_static_literals_add) ../../../../ext/prism/../../src/static_literals.c:404
/home/user/code/ruby-prism/lib/prism/prism.so(pm_hash_key_static_literals_add+0x46) [0x732de24773f6] ../../../../ext/prism/../../src/prism.c:13319
/home/user/code/ruby-prism/lib/prism/prism.so(pm_symbol_node_label_p+0x0) [0x732de2499775] ../../../../ext/prism/../../src/prism.c:13441
/home/user/code/ruby-prism/lib/prism/prism.so(parse_assocs) ../../../../ext/prism/../../src/prism.c:13444
/home/user/code/ruby-prism/lib/prism/prism.so(parse_expression_prefix+0xb490) [0x732de24b0ea0] ../../../../ext/prism/../../src/prism.c:17792
/home/user/code/ruby-prism/lib/prism/prism.so(parse_expression+0x35) [0x732de2494f75] ../../../../ext/prism/../../src/prism.c:21542
/home/user/code/ruby-prism/lib/prism/prism.so(parse_statements+0x10d) [0x732de249566d] ../../../../ext/prism/../../src/prism.c:13234
/home/user/code/ruby-prism/lib/prism/prism.so(parse_program+0x69) [0x732de2498959] ../../../../ext/prism/../../src/prism.c:21815
/home/user/code/ruby-prism/lib/prism/prism.so(parse_input+0x4f) [0x732de2444bff] ../../../../ext/prism/extension.c:850
/home/user/code/ruby-prism/lib/prism/prism.so(parse_file+0x53) [0x732de2444d03] ../../../../ext/prism/extension.c:950
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(vm_call_cfunc_with_frame_+0xfd) [0x732dfe37990d] /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/vm_insnhelper.c:3902
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(vm_sendish+0xb5) [0x732dfe3918ba] /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/vm_insnhelper.c:6124
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(vm_exec_core) /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/insns.def:904
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(vm_exec_loop+0xa) [0x732dfe397e3a] /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/vm.c:2825
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(rb_vm_exec) /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/vm.c:2801
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(rb_ec_exec_node+0x99) [0x732dfe168ea9] /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/eval.c:283
/home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0(ruby_run_node+0x8b) [0x732dfe16f73b] /tmp/ruby-build.20260106125831.6282.3nZa2d/ruby-4.0.0/eval.c:321
/home/user/.rbenv/versions/4.0.0/bin/ruby(rb_main+0x21) [0x62f36fbb9100] ./main.c:42
/home/user/.rbenv/versions/4.0.0/bin/ruby(main) ./main.c:62
/usr/lib/libc.so.6(0x732dfdc46635) [0x732dfdc46635]
/usr/lib/libc.so.6(__libc_start_main+0x89) [0x732dfdc466e9]
[0x62f36fbb9145]

-- Other runtime information -----------------------------------------------

* Loaded script: /home/user/code/ruby-prism/bin/prism

* Ruby Box: disabled
* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 fiber.so
    3 rational.so
    4 complex.so
    5 pathname.so
    6 ruby2_keywords.rb
    7 set.rb
    8 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/encdb.so
    9 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/trans/transdb.so
   10 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/rbconfig.rb
   11 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/defaults.rb
   12 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/deprecate.rb
   13 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/errors.rb
   14 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/target_rbconfig.rb
   15 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/win_platform.rb
   16 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/unknown_command_spell_checker.rb
   17 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/exceptions.rb
   18 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/basic_specification.rb
   19 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/stub_specification.rb
   20 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/platform.rb
   21 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/specification_record.rb
   22 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/util/list.rb
   23 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/version.rb
   24 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/requirement.rb
   25 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/specification.rb
   26 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/util.rb
   27 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/dependency.rb
   28 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/core_ext/kernel_gem.rb
   29 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/monitor.so
   30 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/monitor.rb
   31 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems.rb
   32 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/bundled_gems.rb
   33 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/rubygems/path_support.rb
   34 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/error_highlight/version.rb
   35 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/error_highlight/base.rb
   36 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/error_highlight/formatter.rb
   37 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/error_highlight/core_ext.rb
   38 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/error_highlight.rb
   39 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/version.rb
   40 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/core_ext/name_error.rb
   41 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/levenshtein.rb
   42 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/jaro_winkler.rb
   43 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checker.rb
   44 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   45 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   46 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/name_error_checkers.rb
   47 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/method_name_checker.rb
   48 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/key_error_checker.rb
   49 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/null_checker.rb
   50 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/tree_spell_checker.rb
   51 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/require_path_checker.rb
   52 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/spell_checkers/pattern_key_name_checker.rb
   53 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean/formatter.rb
   54 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/did_you_mean.rb
   55 /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/syntax_suggest/core_ext.rb
   56 /home/user/code/ruby-prism/lib/prism/polyfill/byteindex.rb
   57 /home/user/code/ruby-prism/lib/prism/polyfill/warn.rb
   58 /home/user/code/ruby-prism/lib/prism/node.rb
   59 /home/user/code/ruby-prism/lib/prism/node_ext.rb
   60 /home/user/code/ruby-prism/lib/prism/parse_result.rb
   61 /home/user/code/ruby-prism/lib/prism/string_query.rb
   62 /home/user/code/ruby-prism/lib/prism/prism.so
   63 /home/user/code/ruby-prism/lib/prism.rb

* Process memory map:

62f36fbb8000-62f36fbb9000 r--p 00000000 08:30 2747953                    /home/user/.rbenv/versions/4.0.0/bin/ruby
62f36fbb9000-62f36fbba000 r-xp 00001000 08:30 2747953                    /home/user/.rbenv/versions/4.0.0/bin/ruby
62f36fbba000-62f36fbbb000 r--p 00002000 08:30 2747953                    /home/user/.rbenv/versions/4.0.0/bin/ruby
62f36fbbb000-62f36fbbc000 r--p 00002000 08:30 2747953                    /home/user/.rbenv/versions/4.0.0/bin/ruby
62f36fbbc000-62f36fbbd000 rw-p 00003000 08:30 2747953                    /home/user/.rbenv/versions/4.0.0/bin/ruby
62f3819f9000-62f3824f2000 rw-p 00000000 00:00 0                          [heap]
732dded32000-732ddef1d000 r--s 00000000 08:30 10510                      /usr/lib/libc.so.6
732ddef1d000-732de0a00000 rw-p 00000000 00:00 0 
732de0a00000-732de21e6000 r--s 00000000 08:30 3633467                    /home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0.0
732de2263000-732de23a1000 rw-p 00000000 00:00 0 
732de23a1000-732de23e0000 r--s 00000000 08:30 2747953                    /home/user/.rbenv/versions/4.0.0/bin/ruby
732de23e0000-732de23f0000 rw-p 00000000 00:00 0 
732de2425000-732de242c000 r--p 00000000 08:30 2130962                    /home/user/code/ruby-prism/lib/prism/prism.so
732de242c000-732de24c2000 r-xp 00007000 08:30 2130962                    /home/user/code/ruby-prism/lib/prism/prism.so
732de24c2000-732de24eb000 r--p 0009d000 08:30 2130962                    /home/user/code/ruby-prism/lib/prism/prism.so
732de24eb000-732de24ee000 r--p 000c6000 08:30 2130962                    /home/user/code/ruby-prism/lib/prism/prism.so
732de24ee000-732de24ef000 rw-p 000c9000 08:30 2130962                    /home/user/code/ruby-prism/lib/prism/prism.so
732de24ef000-732de25b0000 rw-p 00000000 00:00 0 
732de25bf000-732de2610000 rw-p 00000000 00:00 0 
732de2620000-732de2720000 rw-p 00000000 00:00 0 
732de272f000-732de2730000 ---p 00000000 00:00 0 
732de2730000-732de27d1000 rw-p 00000000 00:00 0 
732de27d1000-732de27d2000 ---p 00000000 00:00 0 
732de27d2000-732de2873000 rw-p 00000000 00:00 0 
732de2873000-732de2874000 ---p 00000000 00:00 0 
732de2874000-732de2915000 rw-p 00000000 00:00 0 
732de2915000-732de2916000 ---p 00000000 00:00 0 
732de2916000-732de29b7000 rw-p 00000000 00:00 0 
732de29b7000-732de29b8000 ---p 00000000 00:00 0 
732de29b8000-732de2a59000 rw-p 00000000 00:00 0 
732de2a59000-732de2a5a000 ---p 00000000 00:00 0 
732de2a5a000-732de2afb000 rw-p 00000000 00:00 0 
732de2afb000-732de2afc000 ---p 00000000 00:00 0 
732de2afc000-732de2b9d000 rw-p 00000000 00:00 0 
732de2b9d000-732de2b9e000 ---p 00000000 00:00 0 
732de2b9e000-732de2c3f000 rw-p 00000000 00:00 0 
732de2c3f000-732de2c40000 ---p 00000000 00:00 0 
732de2c40000-732de2ce1000 rw-p 00000000 00:00 0 
732de2ce1000-732de2ce2000 ---p 00000000 00:00 0 
732de2ce2000-732de2d83000 rw-p 00000000 00:00 0 
732de2d83000-732de2d84000 ---p 00000000 00:00 0 
732de2d84000-732de2e25000 rw-p 00000000 00:00 0 
732de2e25000-732de2e26000 ---p 00000000 00:00 0 
732de2e26000-732de2ec7000 rw-p 00000000 00:00 0 
732de2ec7000-732de2ec8000 ---p 00000000 00:00 0 
732de2ec8000-732de2f69000 rw-p 00000000 00:00 0 
732de2f69000-732de2f6a000 ---p 00000000 00:00 0 
732de2f6a000-732de300b000 rw-p 00000000 00:00 0 
732de300b000-732de300c000 ---p 00000000 00:00 0 
732de300c000-732de30ad000 rw-p 00000000 00:00 0 
732de30ad000-732de30ae000 ---p 00000000 00:00 0 
732de30ae000-732de314f000 rw-p 00000000 00:00 0 
732de314f000-732de3150000 ---p 00000000 00:00 0 
732de3150000-732de31f1000 rw-p 00000000 00:00 0 
732de31f1000-732de31f2000 ---p 00000000 00:00 0 
732de31f2000-732de3293000 rw-p 00000000 00:00 0 
732de3293000-732de3294000 ---p 00000000 00:00 0 
732de3294000-732de3335000 rw-p 00000000 00:00 0 
732de3335000-732de3336000 ---p 00000000 00:00 0 
732de3336000-732de33d7000 rw-p 00000000 00:00 0 
732de33d7000-732de33d8000 ---p 00000000 00:00 0 
732de33d8000-732de3479000 rw-p 00000000 00:00 0 
732de3479000-732de347a000 ---p 00000000 00:00 0 
732de347a000-732de351b000 rw-p 00000000 00:00 0 
732de351b000-732de351c000 ---p 00000000 00:00 0 
732de351c000-732de35bd000 rw-p 00000000 00:00 0 
732de35bd000-732de35be000 ---p 00000000 00:00 0 
732de35be000-732de365f000 rw-p 00000000 00:00 0 
732de365f000-732de3660000 ---p 00000000 00:00 0 
732de3660000-732de3701000 rw-p 00000000 00:00 0 
732de3701000-732de3702000 ---p 00000000 00:00 0 
732de3702000-732de37a3000 rw-p 00000000 00:00 0 
732de37a3000-732de37a4000 ---p 00000000 00:00 0 
732de37a4000-732de3845000 rw-p 00000000 00:00 0 
732de3845000-732de3846000 ---p 00000000 00:00 0 
732de3846000-732de38e7000 rw-p 00000000 00:00 0 
732de38e7000-732de38e8000 ---p 00000000 00:00 0 
732de38e8000-732de3989000 rw-p 00000000 00:00 0 
732de3989000-732de398a000 ---p 00000000 00:00 0 
732de398a000-732de3a2b000 rw-p 00000000 00:00 0 
732de3a2b000-732de3a2c000 ---p 00000000 00:00 0 
732de3a2c000-732de3acd000 rw-p 00000000 00:00 0 
732de3acd000-732de3ace000 ---p 00000000 00:00 0 
732de3ace000-732de3b6f000 rw-p 00000000 00:00 0 
732de3b6f000-732de3b70000 ---p 00000000 00:00 0 
732de3b70000-732de43c0000 rw-p 00000000 00:00 0 
732de43cf000-732dfd7cf000 rw-p 00000000 00:00 0 
732dfd7e0000-732dfd800000 rw-p 00000000 00:00 0 
732dfd800000-732dfdaec000 r--p 00000000 08:30 133942                     /usr/lib/locale/locale-archive
732dfdaee000-732dfdbf2000 rw-p 00000000 00:00 0 
732dfdbf2000-732dfdbf6000 r--p 00000000 08:30 2437                       /usr/lib/libgcc_s.so.1
732dfdbf6000-732dfdc19000 r-xp 00004000 08:30 2437                       /usr/lib/libgcc_s.so.1
732dfdc19000-732dfdc1d000 r--p 00027000 08:30 2437                       /usr/lib/libgcc_s.so.1
732dfdc1d000-732dfdc1e000 r--p 0002a000 08:30 2437                       /usr/lib/libgcc_s.so.1
732dfdc1e000-732dfdc1f000 rw-p 0002b000 08:30 2437                       /usr/lib/libgcc_s.so.1
732dfdc1f000-732dfdc43000 r--p 00000000 08:30 10510                      /usr/lib/libc.so.6
732dfdc43000-732dfddb4000 r-xp 00024000 08:30 10510                      /usr/lib/libc.so.6
732dfddb4000-732dfde02000 r--p 00195000 08:30 10510                      /usr/lib/libc.so.6
732dfde02000-732dfde06000 r--p 001e2000 08:30 10510                      /usr/lib/libc.so.6
732dfde06000-732dfde08000 rw-p 001e6000 08:30 10510                      /usr/lib/libc.so.6
732dfde08000-732dfde10000 rw-p 00000000 00:00 0 
732dfde10000-732dfde1f000 r--p 00000000 08:30 26782                      /usr/lib/libm.so.6
732dfde1f000-732dfdeaa000 r-xp 0000f000 08:30 26782                      /usr/lib/libm.so.6
732dfdeaa000-732dfdf0c000 r--p 0009a000 08:30 26782                      /usr/lib/libm.so.6
732dfdf0c000-732dfdf0d000 r--p 000fb000 08:30 26782                      /usr/lib/libm.so.6
732dfdf0d000-732dfdf0e000 rw-p 000fc000 08:30 26782                      /usr/lib/libm.so.6
732dfdf0e000-732dfdf0f000 r--p 00000000 08:30 27693                      /usr/lib/libcrypt.so.2.0.0
732dfdf0f000-732dfdf23000 r-xp 00001000 08:30 27693                      /usr/lib/libcrypt.so.2.0.0
732dfdf23000-732dfdf37000 r--p 00015000 08:30 27693                      /usr/lib/libcrypt.so.2.0.0
732dfdf37000-732dfdf38000 r--p 00029000 08:30 27693                      /usr/lib/libcrypt.so.2.0.0
732dfdf38000-732dfdf39000 rw-p 0002a000 08:30 27693                      /usr/lib/libcrypt.so.2.0.0
732dfdf39000-732dfdf41000 rw-p 00000000 00:00 0 
732dfdf41000-732dfdf52000 r--p 00000000 08:30 3811                       /usr/lib/libgmp.so.10.5.0
732dfdf52000-732dfdfcd000 r-xp 00011000 08:30 3811                       /usr/lib/libgmp.so.10.5.0
732dfdfcd000-732dfdfe4000 r--p 0008c000 08:30 3811                       /usr/lib/libgmp.so.10.5.0
732dfdfe4000-732dfdfe6000 r--p 000a3000 08:30 3811                       /usr/lib/libgmp.so.10.5.0
732dfdfe6000-732dfdfe7000 rw-p 000a5000 08:30 3811                       /usr/lib/libgmp.so.10.5.0
732dfdfe7000-732dfdfea000 r--p 00000000 08:30 169309                     /usr/lib/libz.so.1.3.1
732dfdfea000-732dfdff8000 r-xp 00003000 08:30 169309                     /usr/lib/libz.so.1.3.1
732dfdff8000-732dfdffe000 r--p 00011000 08:30 169309                     /usr/lib/libz.so.1.3.1
732dfdffe000-732dfdfff000 r--p 00017000 08:30 169309                     /usr/lib/libz.so.1.3.1
732dfdfff000-732dfe000000 rw-p 00018000 08:30 169309                     /usr/lib/libz.so.1.3.1
732dfe000000-732dfe064000 r--p 00000000 08:30 3633467                    /home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0.0
732dfe064000-732dfe649000 r-xp 00064000 08:30 3633467                    /home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0.0
732dfe649000-732dfe858000 r--p 00649000 08:30 3633467                    /home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0.0
732dfe858000-732dfe882000 r--p 00858000 08:30 3633467                    /home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0.0
732dfe882000-732dfe888000 rw-p 00882000 08:30 3633467                    /home/user/.rbenv/versions/4.0.0/lib/libruby.so.4.0.0
732dfe888000-732dfe89d000 rw-p 00000000 00:00 0 
732dfe89e000-732dfe8a0000 rw-p 00000000 00:00 0 
732dfe8ab000-732dfe8ac000 r--p 00000000 08:30 3633498                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/monitor.so
732dfe8ac000-732dfe8ad000 r-xp 00001000 08:30 3633498                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/monitor.so
732dfe8ad000-732dfe8ae000 r--p 00002000 08:30 3633498                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/monitor.so
732dfe8ae000-732dfe8af000 r--p 00002000 08:30 3633498                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/monitor.so
732dfe8af000-732dfe8b0000 rw-p 00003000 08:30 3633498                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/monitor.so
732dfe8b4000-732dfe8b5000 r--p 00000000 08:30 3633574                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/trans/transdb.so
732dfe8b5000-732dfe8b7000 r-xp 00001000 08:30 3633574                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/trans/transdb.so
732dfe8b7000-732dfe8b8000 r--p 00003000 08:30 3633574                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/trans/transdb.so
732dfe8b8000-732dfe8b9000 r--p 00003000 08:30 3633574                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/trans/transdb.so
732dfe8b9000-732dfe8ba000 rw-p 00004000 08:30 3633574                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/trans/transdb.so
732dfe8ba000-732dfe8bb000 r--p 00000000 08:30 3633552                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/encdb.so
732dfe8bb000-732dfe8bc000 r-xp 00001000 08:30 3633552                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/encdb.so
732dfe8bc000-732dfe8bd000 r--p 00002000 08:30 3633552                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/encdb.so
732dfe8bd000-732dfe8be000 r--p 00002000 08:30 3633552                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/encdb.so
732dfe8be000-732dfe8bf000 rw-p 00003000 08:30 3633552                    /home/user/.rbenv/versions/4.0.0/lib/ruby/4.0.0/x86_64-linux/enc/encdb.so
732dfe8bf000-732dfe8c1000 rw-p 00000000 00:00 0 
732dfe8c1000-732dfe8c2000 r--p 00000000 08:30 10466                      /usr/lib/ld-linux-x86-64.so.2
732dfe8c2000-732dfe8ec000 r-xp 00001000 08:30 10466                      /usr/lib/ld-linux-x86-64.so.2
732dfe8ec000-732dfe8f7000 r--p 0002b000 08:30 10466                      /usr/lib/ld-linux-x86-64.so.2
732dfe8f7000-732dfe8f9000 r--p 00036000 08:30 10466                      /usr/lib/ld-linux-x86-64.so.2
732dfe8f9000-732dfe8fa000 rw-p 00038000 08:30 10466                      /usr/lib/ld-linux-x86-64.so.2
732dfe8fa000-732dfe8fb000 rw-p 00000000 00:00 0 
7fffe5c26000-7fffe5c48000 rw-p 00000000 00:00 0                          [stack]
7fffe5cab000-7fffe5caf000 r--p 00000000 00:00 0                          [vvar]
7fffe5caf000-7fffe5cb1000 r-xp 00000000 00:00 0                          [vdso]


Segmentation fault         (core dumped) bin/parse

This is enough to make it crash (applied on top of 27c24fd)

diff --git a/config.yml b/config.yml
index f6e99c66b..0736f5a0b 100644
--- a/config.yml
+++ b/config.yml
@@ -3920,6 +3920,18 @@ nodes:
 
           nil
           ^^^
+  - name: NoBlockParameterNode
+    fields:
+      - name: operator_loc
+        type: location
+      - name: keyword_loc
+        type: location
+    comment: |
+      Represents the use of `&nil` inside method arguments.
+
+          def a(&nil)
+                ^^^^
+          end
   - name: NoKeywordsParameterNode
     fields:
       - name: operator_loc
@@ -4066,7 +4078,9 @@ nodes:
           - NoKeywordsParameterNode
       - name: block
         type: node?
-        kind: BlockParameterNode
+        kind:
+          - BlockParameterNode
+          - NoBlockParameterNode
     comment: |
       Represents the list of parameters on a method, block, or lambda definition.
 
diff --git a/src/prism.c b/src/prism.c
index ca0f2a55a..0327d32fb 100644
--- a/src/prism.c
+++ b/src/prism.c
@@ -5787,9 +5787,9 @@ pm_parameters_node_keyword_rest_set(pm_parameters_node_t *params, pm_node_t *par
  * Set the block parameter on a ParametersNode node.
  */
 static void
-pm_parameters_node_block_set(pm_parameters_node_t *params, pm_block_parameter_node_t *param) {
+pm_parameters_node_block_set(pm_parameters_node_t *params, pm_node_t *param) {
     assert(params->block == NULL);
-    pm_parameters_node_location_set(params, UP(param));
+    pm_parameters_node_location_set(params, param);
     params->block = param;
 }
 
@@ -13945,7 +13945,7 @@ parse_parameters(
                     pm_node_flag_set_repeated_parameter(UP(param));
                 }
                 if (params->block == NULL) {
-                    pm_parameters_node_block_set(params, param);
+                    pm_parameters_node_block_set(params, UP(param));
                 } else {
                     pm_parser_err_node(parser, UP(param), PM_ERR_PARAMETER_BLOCK_MULTI);
                     pm_parameters_node_posts_append(params, UP(param));

cc @paracycle, @kddnewton. This is out of my comfort-zone. If I had to guess, then I would point my finger here

/**
* We need to align nodes in the AST to a pointer boundary so that it can be
* safely cast to different node types. Use PRISM_ALIGNAS/PRISM_ALIGNOF to
* specify alignment in a compiler-agnostic way.
*/
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L /* C11 or later */
/** Specify alignment for a type or variable. */
#define PRISM_ALIGNAS _Alignas
/** Get the alignment requirement of a type. */
#define PRISM_ALIGNOF _Alignof
#elif defined(__GNUC__) || defined(__clang__)
/** Specify alignment for a type or variable. */
#define PRISM_ALIGNAS(size) __attribute__((aligned(size)))
/** Get the alignment requirement of a type. */
#define PRISM_ALIGNOF(type) __alignof__(type)
#elif defined(_MSC_VER)
/** Specify alignment for a type or variable. */
#define PRISM_ALIGNAS(size) __declspec(align(size))
/** Get the alignment requirement of a type. */
#define PRISM_ALIGNOF(type) __alignof(type)
#else
/** Void because this platform does not support specifying alignment. */
#define PRISM_ALIGNAS(size)
/** Fallback to sizeof as alignment requirement of a type. */
#define PRISM_ALIGNOF(type) sizeof(type)
#endif
. But really I have no clue. Can one of you take a look and see if you can reproduce?

@kddnewton
Copy link
Collaborator

@Earlopain can't reproduce locally. Any chance bundle exec rake clean fixes it? Sometimes things get out of sync.

@Earlopain
Copy link
Collaborator Author

Huh, yeah. That does it. I tried on two machines but had it happen on both. 🤷

@kddnewton
Copy link
Collaborator

That probably means there's a dependency missing somewhere, where it doesn't know to rebuild something when config.yml changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants