Project

General

Profile

Bug #15578

Missing TracePoint return event when a conditional is used before a rescue

Added by zetter (Chris Zetter) 8 months ago. Updated about 2 months ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:91366]

Description

Hello, I've been using TracePoint on a Ruby on Rails project and noticed that the number of method 'return' events was less than the number of 'call' events. An example of a return event that isn't always logged (depending on inputs) is the _decrypt method - https://github.com/rails/rails/blob/v5.2.2/activesupport/lib/active_support/message_encryptor.rb#L183

I've made a simplified example based on this method. There are other methods that don't have exact same structure but show the same problem. I haven't yet been able to make reproducible examples for them.

Running the following code with TracePoint doesn't emit the 'return' event as expected:

def example
  1 if 1 == 1
rescue
end

example()

Here are the events that are logged using TracePoint:

[nil, :line]
[:example, :call]
[:example, :line]

I expect it log the return even from the example method:

[nil, :line]
[:example, :call]
[:example, :line]
[:example, :return]

I have attached a runnable example.

This bug looks like it was introduced between 2.5.3 and 2.6.0. It works as expected on 2.5.3, and it occurs on 2.6.0 and 2.6.1

I've also tried compiling the instructions without peephole optimisation on and the bug no longer occurs.


Files

example.rb (249 Bytes) example.rb zetter (Chris Zetter), 01/31/2019 04:16 PM

Related issues

Related to Ruby master - Bug #15911: Missing TracePoint return event for ||=ClosedActions

Associated revisions

Revision 1bc6c3f4
Added by nobu (Nobuyoshi Nakada) 8 months ago

Revert r63383, r63248 "compile.c: copy a short insn with leave"

When copying leave insn, TRACE also should be copied if it is
present, but this optimization is trivial and not worth the
complexity. [ruby-core:91366] [Bug #15578]

4cae5353c03009beb1e0a1619422072773580609
5afd479de63b6609ddcd1510da94d2c1ac384f7f

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66977 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 66977
Added by nobu (Nobuyoshi Nakada) 8 months ago

Revert r63383, r63248 "compile.c: copy a short insn with leave"

When copying leave insn, TRACE also should be copied if it is
present, but this optimization is trivial and not worth the
complexity. [ruby-core:91366] [Bug #15578]

4cae5353c03009beb1e0a1619422072773580609
5afd479de63b6609ddcd1510da94d2c1ac384f7f

Revision fabb2fed
Added by nagachika (Tomoyuki Chikanaga) about 2 months ago

merge revision(s) 66977: [Backport #15578]

    Revert r63383, r63248 "compile.c: copy a short insn with leave"

    When copying `leave` insn, TRACE also should be copied if it is
    present, but this optimization is trivial and not worth the
    complexity.  [ruby-core:91366] [Bug #15578]

    4cae5353c03009beb1e0a1619422072773580609
    5afd479de63b6609ddcd1510da94d2c1ac384f7f

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_6@67726 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 67726
Added by nagachika (Tomoyuki Chikanaga) about 2 months ago

merge revision(s) 66977: [Backport #15578]

Revert r63383, r63248 "compile.c: copy a short insn with leave"

When copying `leave` insn, TRACE also should be copied if it is
present, but this optimization is trivial and not worth the
complexity.  [ruby-core:91366] [Bug #15578]

4cae5353c03009beb1e0a1619422072773580609
5afd479de63b6609ddcd1510da94d2c1ac384f7f

History

#1

Updated by zetter (Chris Zetter) 8 months ago

  • Description updated (diff)
#2

Updated by zetter (Chris Zetter) 8 months ago

  • Description updated (diff)

Updated by wanabe (_ wanabe) 8 months ago

git bisect shows it is introduced by r63248.

#4

Updated by nobu (Nobuyoshi Nakada) 8 months ago

  • Status changed from Open to Closed

Applied in changeset trunk|r66977.


Revert r63383, r63248 "compile.c: copy a short insn with leave"

When copying leave insn, TRACE also should be copied if it is
present, but this optimization is trivial and not worth the
complexity. [ruby-core:91366] [Bug #15578]

4cae5353c03009beb1e0a1619422072773580609
5afd479de63b6609ddcd1510da94d2c1ac384f7f

#5

Updated by mame (Yusuke Endoh) 3 months ago

  • Related to Bug #15911: Missing TracePoint return event for ||= added
#6

Updated by mame (Yusuke Endoh) 3 months ago

  • Backport changed from 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN to 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: REQUIRED

Updated by nagachika (Tomoyuki Chikanaga) about 2 months ago

  • Backport changed from 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: REQUIRED to 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: DONE

ruby_2_6 r67726 merged revision(s) 66977.

Also available in: Atom PDF