Issue #13369 has been updated by usa (Usaku NAKAMURA).

Backport changed from 2.2: WONTFIX, 2.3: REQUIRED, 2.4: DONE to 2.2: WONTFIX, 2.3: DONE, 2.4: DONE

ruby_2_3 r59547 merged revision(s) 58262,58263.

----------------------------------------
Bug #13369: TracePoint gives incorrect `return_value` after rescuing error when using `return`
https://bugs.ruby-lang.org/issues/13369#change-66098

* Author: backus (John Backus)
* Status: Closed
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
* Backport: 2.2: WONTFIX, 2.3: DONE, 2.4: DONE
----------------------------------------
In the following example

```ruby
class Foo
  MyError = Class.new(StandardError)

  def example1
    norf
  rescue MyError => error
    2
  end

  def example2
    norf
  rescue MyError => error
    return 2
  end

  def norf
    raise MyError
  end
end

trace = TracePoint.new(:return) do |tp|
  puts "#{tp.defined_class}##{tp.method_id} RETURNS #{tp.return_value.inspect}"
end

trace.enable

Foo.new.example1 # => 2
puts
Foo.new.example2 # => 2

# >> Foo#norf RETURNS nil
# >> Foo#example1 RETURNS 2
# >> 
# >> Foo#norf RETURNS nil
# >> Foo#example2 RETURNS nil
```

Both `example1` AND `example2` return 2. For some reason though, the tracepoint event for `example2` says that it returns `nil`. 

---Files--------------------------------
tracepoint-bug-example.rb (529 Bytes)
diff.patch (1.29 KB)


-- 
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>