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

ruby-changes:68871

From: Maxime <ko1@a...>
Date: Thu, 21 Oct 2021 08:15:00 +0900 (JST)
Subject: [ruby-changes:68871] 215a2f4010 (master): Fix type_diff logic after Alan pointed out errors

https://git.ruby-lang.org/ruby.git/commit/?id=215a2f4010

From 215a2f401068fe0afc18a22377082d0d3d8644fd Mon Sep 17 00:00:00 2001
From: Maxime Chevalier-Boisvert <maxime.chevalierboisvert@s...>
Date: Thu, 1 Apr 2021 10:43:54 -0400
Subject: Fix type_diff logic after Alan pointed out errors

---
 yjit_core.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/yjit_core.c b/yjit_core.c
index 23bddfb573..ec793a053a 100644
--- a/yjit_core.c
+++ b/yjit_core.c
@@ -146,22 +146,25 @@ int type_diff(val_type_t src, val_type_t dst) https://github.com/ruby/ruby/blob/trunk/yjit_core.c#L146
     RUBY_ASSERT(!src.is_heap || !src.is_imm);
     RUBY_ASSERT(!dst.is_heap || !dst.is_imm);
 
-    if (src.type != dst.type && dst.type != ETYPE_UNKNOWN)
+    // If dst assumes heap but src doesn't
+    if (dst.is_heap && !src.is_heap)
         return INT_MAX;
 
-    if (src.is_heap && !dst.is_heap)
+    // If dst assumes imm but src doesn't
+    if (dst.is_imm && !src.is_imm)
         return INT_MAX;
 
-    if (src.is_imm && !dst.is_imm)
+    // If dst assumes known type different from src
+    if (dst.type != ETYPE_UNKNOWN && dst.type != src.type)
         return INT_MAX;
 
-    if (src.is_heap != dst.is_heap)
+    if (dst.is_heap != src.is_heap)
         return 1;
 
-    if (src.is_imm != dst.is_imm)
+    if (dst.is_imm != src.is_imm)
         return 1;
 
-    if (src.type != dst.type)
+    if (dst.type != src.type)
         return 1;
 
     return 0;
-- 
cgit v1.2.1


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

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