Bug #9150

Segfault in case statement execution, possibly related to refinements

Added by Bradley Buda over 1 year ago. Updated about 1 year ago.

[ruby-core:58563]
Status:Closed
Priority:Normal
Assignee:Tomoyuki Chikanaga
ruby -v:ruby 2.0.0p353 (2013-11-22 revision 43783) [x86_64-darwin13.0.0] Backport:1.9.3: UNKNOWN, 2.0.0: UNKNOWN

Description

This code consistently segfaults in 2.0.0p353:

require 'active_support/all'

case 3600
when 1.week then true
end

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: https://bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/42869 . 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;
143
144 if (!ci->me->def) return Qnil;
145
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

Duplicates Backport200 - Backport #8872: Case statements do not honor a refinement of the '===' me... Closed 09/07/2013

History

#1 Updated by Zachary Scott over 1 year ago

  • Status changed from Open to Assigned
  • Assignee set to Tomoyuki Chikanaga

@nagachika What do you think?

#2 Updated by Shugo Maeda over 1 year 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.

#3 Updated by Tomoyuki Chikanaga about 1 year ago

  • Status changed from Assigned to Closed

duplicated. please move to #8872

Also available in: Atom PDF