Title: [225188] trunk/Source/_javascript_Core
Revision
225188
Author
[email protected]
Date
2017-11-27 12:40:51 -0800 (Mon, 27 Nov 2017)

Log Message

Having a bad time watchpoint firing during compilation revealed a racy assertion
https://bugs.webkit.org/show_bug.cgi?id=180048
<rdar://problem/35700009>

Reviewed by Mark Lam.

While a DFG compilation is watching the having a bad time watchpoint, it was
asserting that the rest parameter structure has indexing type ArrayWithContiguous.
However, if the having a bad time watchpoint fires during the compilation,
this particular structure will no longer have ArrayWithContiguous indexing type.
This patch fixes this racy assertion to be aware that the watchpoint may fire
during compilation.

* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileCreateRest):
(JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (225187 => 225188)


--- trunk/Source/_javascript_Core/ChangeLog	2017-11-27 20:39:18 UTC (rev 225187)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-11-27 20:40:51 UTC (rev 225188)
@@ -1,3 +1,22 @@
+2017-11-27  Saam Barati  <[email protected]>
+
+        Having a bad time watchpoint firing during compilation revealed a racy assertion
+        https://bugs.webkit.org/show_bug.cgi?id=180048
+        <rdar://problem/35700009>
+
+        Reviewed by Mark Lam.
+
+        While a DFG compilation is watching the having a bad time watchpoint, it was
+        asserting that the rest parameter structure has indexing type ArrayWithContiguous.
+        However, if the having a bad time watchpoint fires during the compilation,
+        this particular structure will no longer have ArrayWithContiguous indexing type.
+        This patch fixes this racy assertion to be aware that the watchpoint may fire
+        during compilation.
+
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compileCreateRest):
+        (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread):
+
 2017-11-27  Tim Horton  <[email protected]>
 
         One too many zeroes in macOS version number in FeatureDefines

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp (225187 => 225188)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2017-11-27 20:39:18 UTC (rev 225187)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2017-11-27 20:40:51 UTC (rev 225188)
@@ -7246,7 +7246,7 @@
         GPRReg arrayResultGPR = arrayResult.gpr();
 
         bool shouldAllowForArrayStorageStructureForLargeArrays = false;
-        ASSERT(m_jit.graph().globalObjectFor(node->origin.semantic)->restParameterStructure()->indexingType() == ArrayWithContiguous);
+        ASSERT(m_jit.graph().globalObjectFor(node->origin.semantic)->restParameterStructure()->indexingType() == ArrayWithContiguous || m_jit.graph().globalObjectFor(node->origin.semantic)->isHavingABadTime());
         compileAllocateNewArrayWithSize(m_jit.graph().globalObjectFor(node->origin.semantic), arrayResultGPR, arrayLengthGPR, ArrayWithContiguous, shouldAllowForArrayStorageStructureForLargeArrays);
 
         GPRTemporary argumentsStart(this);
@@ -7446,7 +7446,7 @@
 
 
             bool shouldAllowForArrayStorageStructureForLargeArrays = false;
-            ASSERT(m_jit.graph().globalObjectFor(node->origin.semantic)->restParameterStructure()->indexingType() == ArrayWithContiguous);
+            ASSERT(m_jit.graph().globalObjectFor(node->origin.semantic)->restParameterStructure()->indexingType() == ArrayWithContiguous || m_jit.graph().globalObjectFor(node->origin.semantic)->isHavingABadTime());
             compileAllocateNewArrayWithSize(m_jit.graph().globalObjectFor(node->origin.semantic), resultGPR, lengthGPR, ArrayWithContiguous, shouldAllowForArrayStorageStructureForLargeArrays);
         }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to