Issue #17581 has been updated by byroot (Jean Boussier).


@jeremyevans I'm not sure this was properly fixed:

```ruby
def label
  p caller.first
end

def label_caller
  label
end

p RUBY_VERSION
puts 'raw call'
label_caller
puts 'call from group_by'
[1].group_by { label_caller }
```

2.7.2:
```
"2.7.2"
raw call
"/tmp/caller_locations.rb:6:in `label_caller'"
call from group_by
"/tmp/caller_locations.rb:6:in `label_caller'"
```

`ruby_3_0` branch (and `master` I presume):
```
"3.0.0"
raw call
"/tmp/caller_locations.rb:6:in `label_caller'"
call from group_by
"/tmp/caller_locations.rb:2:in `label'"
```



----------------------------------------
Bug #17581: Ruby 3.0 backtrace sometimes returns empty array
https://bugs.ruby-lang.org/issues/17581#change-91055

* Author: HParker (Adam Hess)
* Status: Closed
* Priority: Normal
* Assignee: jeremyevans0 (Jeremy Evans)
* ruby -v: ruby 3.0.0dev (2020-09-04T16:41:35Z master de30450d91) [x86_64-darwin19]
* Backport: 2.5: DONTNEED, 2.6: DONTNEED, 2.7: DONTNEED, 3.0: DONE
----------------------------------------
```ruby
class Foo
  def bar
    p caller(1,1)
  end
end
[Foo.new].group_by(&:bar)
```

3.0: []

2.7: ["test2.rb:6:in `each'"]

A similar thing happens when asking for a larger part of the backtrace:

```ruby
class Foo
  def bar
    p caller(0,4)
  end
end
[Foo.new].group_by(&:bar)
```

3.0: ["test2.rb:3:in `bar'", "test2.rb:6:in `each'", "test2.rb:6:in `group_by'"]

2.7: ["test2.rb:3:in `bar'", "test2.rb:6:in `each'", "test2.rb:6:in `group_by'", "test2.rb:6:in `<main>'"]

I suspect it was introduced by: https://github.com/ruby/ruby/commit/3b24b7914c16930bfadc89d6aff6326a51c54295
Since it seems to have to do with which frames are returned, though I haven't verified since the commit is difficult to revert.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>