[前][次][番号順一覧][スレッド一覧]

ruby-changes:69780

From: Koichi <ko1@a...>
Date: Wed, 17 Nov 2021 22:22:01 +0900 (JST)
Subject: [ruby-changes:69780] 7ec1fc37f4 (master): add `VM_CALLCACHE_ON_STACK`

https://git.ruby-lang.org/ruby.git/commit/?id=7ec1fc37f4

From 7ec1fc37f4c87c691555e76d51b6590761b3ec64 Mon Sep 17 00:00:00 2001
From: Koichi Sasada <ko1@a...>
Date: Tue, 16 Nov 2021 18:14:50 +0900
Subject: add `VM_CALLCACHE_ON_STACK`

check if iseq refers to on stack CC (it shouldn't).
---
 iseq.c        | 17 +++++++++++------
 vm_callinfo.h |  4 +++-
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/iseq.c b/iseq.c
index 081c746ca60..f0117d94ce6 100644
--- a/iseq.c
+++ b/iseq.c
@@ -366,12 +366,17 @@ rb_iseq_mark(const rb_iseq_t *iseq) https://github.com/ruby/ruby/blob/trunk/iseq.c#L366
                 if (vm_ci_markable(ci)) {
                     rb_gc_mark_movable((VALUE)ci);
                 }
-                if (cc && vm_cc_markable(cc)) {
-                    if (!vm_cc_invalidated_p(cc)) {
-                        rb_gc_mark_movable((VALUE)cc);
-                    }
-                    else {
-                        cds[i].cc = rb_vm_empty_cc();
+
+                if (cc) {
+                    VM_ASSERT((cc->flags & VM_CALLCACHE_ON_STACK) == 0);
+
+                    if (vm_cc_markable(cc)) {
+                        if (!vm_cc_invalidated_p(cc)) {
+                            rb_gc_mark_movable((VALUE)cc);
+                        }
+                        else {
+                            cds[i].cc = rb_vm_empty_cc();
+                        }
                     }
                 }
             }
diff --git a/vm_callinfo.h b/vm_callinfo.h
index 91ed55bf5f5..b3aafd6de14 100644
--- a/vm_callinfo.h
+++ b/vm_callinfo.h
@@ -290,6 +290,7 @@ struct rb_callcache { https://github.com/ruby/ruby/blob/trunk/vm_callinfo.h#L290
 };
 
 #define VM_CALLCACHE_UNMARKABLE IMEMO_FL_USER0
+#define VM_CALLCACHE_ON_STACK   IMEMO_FL_USER1
 
 static inline const struct rb_callcache *
 vm_cc_new(VALUE klass,
@@ -305,7 +306,8 @@ vm_cc_new(VALUE klass, https://github.com/ruby/ruby/blob/trunk/vm_callinfo.h#L306
     (struct rb_callcache) {                   \
         .flags = T_IMEMO |                    \
             (imemo_callcache << FL_USHIFT) |  \
-            VM_CALLCACHE_UNMARKABLE,          \
+            VM_CALLCACHE_UNMARKABLE |         \
+            VM_CALLCACHE_ON_STACK,            \
         .klass = clazz,                       \
         .cme_  = cme,                         \
         .call_ = call,                        \
-- 
cgit v1.2.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]