From: tenderlove@...
Date: 2018-09-11T21:55:44+00:00
Subject: [ruby-core:88951] [Ruby trunk Bug#15105] `rb_debug_inspector_open` breaks lazy proc optimization

Issue #15105 has been reported by tenderlovemaking (Aaron Patterson).

----------------------------------------
Bug #15105: `rb_debug_inspector_open` breaks lazy proc optimization
https://bugs.ruby-lang.org/issues/15105

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* Target version: 
* ruby -v: ruby 2.6.0dev (2018-07-28 trunk 64081) [x86_64-darwin17]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
Calling `rb_debug_inspector_open` inside a block that uses lazy proc optimizations breaks the implementation.  r60397 introduced the bug.

I've attached a failing test, but I'll paste the diff here as well:

```diff
From 54e55b83f1a6365ded897ebbef2da758d5739eb0 Mon Sep 17 00:00:00 2001
From: Aaron Patterson <aaron.patterson@gmail.com>
Date: Tue, 11 Sep 2018 14:42:24 -0700
Subject: [PATCH] add a failing test for lazy block

---
 test/-ext-/debug/test_debug.rb | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/test/-ext-/debug/test_debug.rb b/test/-ext-/debug/test_debug.rb
index 3804714d0d..cc1e7b7997 100644
--- a/test/-ext-/debug/test_debug.rb
+++ b/test/-ext-/debug/test_debug.rb
@@ -56,4 +56,25 @@ def test_inspector_open_in_eval
     binds = inspector_in_eval
     binds_check binds, bug7635
   end
+
+  class MyRelation
+    include Enumerable
+
+    def each(&block)
+      records.each(&block)
+    end
+
+    def records
+      [1]
+    end
+  end
+
+  def test_lazy_block
+    x = MyRelation.new.any? do
+      Bug::Debug.inspector
+      true
+    end
+
+    assert x, "any should have returned true"
+  end
 end
-- 
2.17.0

```

I *think* this ep calculation might be wrong, but I'm not totally sure: https://github.com/ruby/ruby/blob/bddc28b2aeb6ca84c9eb2cdd59ccc9b76098e429/vm.c#L726

I don't understand r60397 well enough to figure out what the correct fix is.

Thanks.

---Files--------------------------------
0001-add-a-failing-test-for-lazy-block.patch (949 Bytes)


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