Expand concurrent GC assertion to accept JSValue() or 0
authorkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Jun 2018 18:19:46 +0000 (18:19 +0000)
committerkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Jun 2018 18:19:46 +0000 (18:19 +0000)
https://bugs.webkit.org/show_bug.cgi?id=186855

Reviewed by Mark Lam.

We tend to set unused property slots to either JSValue() or 0
depending on the context. On 64-bit these are the same but on
32-bit JSValue() has a NaN tag. This patch makes it so we
the accept either JSValue() or 0.

* runtime/JSObjectInlines.h:
(JSC::JSObject::prepareToPutDirectWithoutTransition):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233018 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/JSObjectInlines.h

index e14dc3c..8c24d92 100644 (file)
@@ -1,3 +1,18 @@
+2018-06-20  Keith Miller  <keith_miller@apple.com>
+
+        Expand concurrent GC assertion to accept JSValue() or 0
+        https://bugs.webkit.org/show_bug.cgi?id=186855
+
+        Reviewed by Mark Lam.
+
+        We tend to set unused property slots to either JSValue() or 0
+        depending on the context. On 64-bit these are the same but on
+        32-bit JSValue() has a NaN tag. This patch makes it so we
+        the accept either JSValue() or 0.
+
+        * runtime/JSObjectInlines.h:
+        (JSC::JSObject::prepareToPutDirectWithoutTransition):
+
 2018-06-20  Guillaume Emont  <guijemont@igalia.com>
 
         [Armv7] Linkbuffer: executableOffsetFor() fails for location 2
index ec331a1..a24a329 100644 (file)
@@ -206,7 +206,7 @@ ALWAYS_INLINE PropertyOffset JSObject::prepareToPutDirectWithoutTransition(VM& v
 
             // This assertion verifies that the concurrent GC won't read garbage if the concurrentGC
             // is running at the same time we put without transitioning.
-            ASSERT(!JSValue::encode(getDirect(offset)));
+            ASSERT(!getDirect(offset) || !JSValue::encode(getDirect(offset)));
             result = offset;
         });
     return result;