Bug #9150

Segfault in case statement execution, possibly related to refinements

Added by bradleybuda (Bradley Buda) over 6 years ago. Updated over 6 years ago.

Target version:
ruby -v:
ruby 2.0.0p353 (2013-11-22 revision 43783) [x86_64-darwin13.0.0]


This code consistently segfaults in 2.0.0p353:

require 'active_support/all'

case 3600
when 1.week then true

This is after gem install activesupport --version=3.2.13. The code works fine in 2.0.0p247.

I ran a git bisect between the two patches and I've narrowed it down to this change: . I don't know enough about ruby's internals to debug this any further, but according to LLDB the problem is a null pointer dereference in vm_eval.c:

141 {
142 VALUE ret;
144 if (!ci->me->def) return Qnil;
146 if (th->passed_block) {
147 ci->blockptr = (rb_block_t *)th->passed_block;

ci->me is null on line 144.

I can reproduce this error on both OSX and Linux. Let me know if I can provide any more info to help debug this.

Related issues

Is duplicate of Backport200 - Backport #8872: Case statements do not honor a refinement of the '===' methodClosed09/07/2013nagachika (Tomoyuki Chikanaga)Actions

Updated by zzak (Zachary Scott) over 6 years ago

  • Status changed from Open to Assigned
  • Assignee set to nagachika (Tomoyuki Chikanaga)

nagachika (Tomoyuki Chikanaga) What do you think?

Updated by shugo (Shugo Maeda) over 6 years ago

I've not investigated this problem yet, but Matz said implicit method calls should not honor refinements, so r42869 might be an undesirable change.

Updated by nagachika (Tomoyuki Chikanaga) over 6 years ago

  • Status changed from Assigned to Closed

duplicated. please move to #8872

Also available in: Atom PDF