Changeset 233697 in webkit


Ignore:
Timestamp:
Jul 10, 2018, 1:47:07 PM (7 years ago)
Author:
mark.lam@apple.com
Message:

[32-bit JSC tests] ASSERTION FAILED: !butterfly->propertyStorage()[-I - 1].get() under JSC::ObjectInitializationScope::verifyPropertiesAreInitialized.
https://bugs.webkit.org/show_bug.cgi?id=187362
<rdar://problem/42027210>

Reviewed by Saam Barati.

On 32-bit targets, a 0 valued JSValue is not the empty JSValue, but it is a valid
value to use for initializing unused properties. Updated an assertion to account
for this.

  • runtime/ObjectInitializationScope.cpp:

(JSC::ObjectInitializationScope::verifyPropertiesAreInitialized):

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/Source/JavaScriptCore/ChangeLog

    r233690 r233697  
     12018-07-10  Mark Lam  <mark.lam@apple.com>
     2
     3        [32-bit JSC tests] ASSERTION FAILED: !butterfly->propertyStorage()[-I - 1].get() under JSC::ObjectInitializationScope::verifyPropertiesAreInitialized.
     4        https://bugs.webkit.org/show_bug.cgi?id=187362
     5        <rdar://problem/42027210>
     6
     7        Reviewed by Saam Barati.
     8
     9        On 32-bit targets, a 0 valued JSValue is not the empty JSValue, but it is a valid
     10        value to use for initializing unused properties.  Updated an assertion to account
     11        for this.
     12
     13        * runtime/ObjectInitializationScope.cpp:
     14        (JSC::ObjectInitializationScope::verifyPropertiesAreInitialized):
     15
    1162018-07-10  Michael Saboff  <msaboff@apple.com>
    217
  • TabularUnified trunk/Source/JavaScriptCore/runtime/ObjectInitializationScope.cpp

    r232951 r233697  
    8484    }
    8585
     86    auto isSafeEmptyValueForGCScanning = [] (JSValue value) {
     87#if USE(JSVALUE64)
     88        return !value;
     89#else
     90        return !value || !JSValue::encode(value);
     91#endif
     92    };
     93
    8694    for (int64_t i = 0; i < static_cast<int64_t>(structure->outOfLineCapacity()); i++) {
    8795        // We rely on properties past the last offset be zero for concurrent GC.
    8896        if (i + firstOutOfLineOffset > structure->lastOffset())
    89             ASSERT(!butterfly->propertyStorage()[-i - 1].get());
     97            ASSERT(isSafeEmptyValueForGCScanning(butterfly->propertyStorage()[-i - 1].get()));
    9098        else if (isScribbledValue(butterfly->propertyStorage()[-i - 1].get())) {
    9199            dataLogLn("Found scribbled property at i = ", -i - 1);
Note: See TracChangeset for help on using the changeset viewer.