Title: [219810] releases/WebKitGTK/webkit-2.16
Revision
219810
Author
[email protected]
Date
2017-07-24 03:51:10 -0700 (Mon, 24 Jul 2017)

Log Message

Merge r215351 - Should use flushDirect() when flushing the scopeRegister due to needsScopeRegister().
https://bugs.webkit.org/show_bug.cgi?id=170661
<rdar://problem/31579046>

Reviewed by Filip Pizlo.

JSTests:

* stress/regress-170661.js: Added.

Source/_javascript_Core:

Previously, we were using flush() to flush the outermost frame's scopeRegister.
This is incorrect because flush() expects the VirtualRegister value passed to
it to be that of the top most inlined frame.  In the event that we reach a
terminal condition while inside an inlined frame, flush() will end up flushing
the wrong register.  The fix is simply to use flushDirect() instead.

* dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::flush):

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.16/JSTests/ChangeLog (219809 => 219810)


--- releases/WebKitGTK/webkit-2.16/JSTests/ChangeLog	2017-07-24 10:49:23 UTC (rev 219809)
+++ releases/WebKitGTK/webkit-2.16/JSTests/ChangeLog	2017-07-24 10:51:10 UTC (rev 219810)
@@ -1,3 +1,13 @@
+2017-04-13  Mark Lam  <[email protected]>
+
+        Should use flushDirect() when flushing the scopeRegister due to needsScopeRegister().
+        https://bugs.webkit.org/show_bug.cgi?id=170661
+        <rdar://problem/31579046>
+
+        Reviewed by Filip Pizlo.
+
+        * stress/regress-170661.js: Added.
+
 2017-04-20  Mark Lam  <[email protected]>
 
         virtualThunkFor() needs to materialize its of tagMaskRegister for tail calls.

Added: releases/WebKitGTK/webkit-2.16/JSTests/stress/regress-170661.js (0 => 219810)


--- releases/WebKitGTK/webkit-2.16/JSTests/stress/regress-170661.js	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.16/JSTests/stress/regress-170661.js	2017-07-24 10:51:10 UTC (rev 219810)
@@ -0,0 +1,18 @@
+function f() {
+    (function bar() {
+        eval('1');
+        f();
+    }());
+
+    throw 1;
+}
+
+var exception;
+try {
+    f();
+} catch (e) {
+    exception = e;
+}
+
+if (exception != "RangeError: Maximum call stack size exceeded.")
+    throw("FAILED");

Modified: releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/ChangeLog (219809 => 219810)


--- releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/ChangeLog	2017-07-24 10:49:23 UTC (rev 219809)
+++ releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/ChangeLog	2017-07-24 10:51:10 UTC (rev 219810)
@@ -1,3 +1,20 @@
+2017-04-13  Mark Lam  <[email protected]>
+
+        Should use flushDirect() when flushing the scopeRegister due to needsScopeRegister().
+        https://bugs.webkit.org/show_bug.cgi?id=170661
+        <rdar://problem/31579046>
+
+        Reviewed by Filip Pizlo.
+
+        Previously, we were using flush() to flush the outermost frame's scopeRegister.
+        This is incorrect because flush() expects the VirtualRegister value passed to
+        it to be that of the top most inlined frame.  In the event that we reach a
+        terminal condition while inside an inlined frame, flush() will end up flushing
+        the wrong register.  The fix is simply to use flushDirect() instead.
+
+        * dfg/DFGByteCodeParser.cpp:
+        (JSC::DFG::ByteCodeParser::flush):
+
 2017-04-20  Mark Lam  <[email protected]>
 
         virtualThunkFor() needs to materialize its of tagMaskRegister for tail calls.

Modified: releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp (219809 => 219810)


--- releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp	2017-07-24 10:49:23 UTC (rev 219809)
+++ releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp	2017-07-24 10:51:10 UTC (rev 219810)
@@ -625,7 +625,7 @@
         if (!inlineStackEntry->m_inlineCallFrame && m_graph.needsFlushedThis())
             flushDirect(virtualRegisterForArgument(0));
         if (m_graph.needsScopeRegister())
-            flush(m_codeBlock->scopeRegister());
+            flushDirect(m_codeBlock->scopeRegister());
     }
 
     void flushForTerminal()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to