Title: [166064] trunk
Revision
166064
Author
[email protected]
Date
2014-03-21 09:04:31 -0700 (Fri, 21 Mar 2014)

Log Message

StackLayoutPhase should find the union'ed calleeVariable before accessing its machineLocal.
<https://webkit.org/b/130566>

Reviewed by Filip Pizlo.

Source/_javascript_Core: 

* dfg/DFGStackLayoutPhase.cpp:
(JSC::DFG::StackLayoutPhase::run):

LayoutTests: 

* js/regress-130566-expected.txt: Added.
* js/regress-130566.html: Added.
* js/script-tests/regress-130566.js: Added.
(test.doTest):
(test.for):
(test):

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (166063 => 166064)


--- trunk/LayoutTests/ChangeLog	2014-03-21 15:22:45 UTC (rev 166063)
+++ trunk/LayoutTests/ChangeLog	2014-03-21 16:04:31 UTC (rev 166064)
@@ -1,3 +1,17 @@
+2014-03-21  Mark Lam  <[email protected]>
+
+        StackLayoutPhase should find the union'ed calleeVariable before accessing its machineLocal.
+        <https://webkit.org/b/130566>
+
+        Reviewed by Filip Pizlo.
+
+        * js/regress-130566-expected.txt: Added.
+        * js/regress-130566.html: Added.
+        * js/script-tests/regress-130566.js: Added.
+        (test.doTest):
+        (test.for):
+        (test):
+
 2014-03-21  Zalan Bujtas  <[email protected]>
 
         Subpixel rendering: RenderBox is positioned off by one when non-compositing transform is present.

Added: trunk/LayoutTests/js/regress-130566-expected.txt (0 => 166064)


--- trunk/LayoutTests/js/regress-130566-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/js/regress-130566-expected.txt	2014-03-21 16:04:31 UTC (rev 166064)
@@ -0,0 +1,9 @@
+This tests ensures that the DFG StackLayoutPhase is only accessing a union'ed calleeVariable. This test should not crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/js/regress-130566.html (0 => 166064)


--- trunk/LayoutTests/js/regress-130566.html	                        (rev 0)
+++ trunk/LayoutTests/js/regress-130566.html	2014-03-21 16:04:31 UTC (rev 166064)
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script src=""
+<script src=""
+</body>
+</html>

Added: trunk/LayoutTests/js/script-tests/regress-130566.js (0 => 166064)


--- trunk/LayoutTests/js/script-tests/regress-130566.js	                        (rev 0)
+++ trunk/LayoutTests/js/script-tests/regress-130566.js	2014-03-21 16:04:31 UTC (rev 166064)
@@ -0,0 +1,24 @@
+description(
+"This tests ensures that the DFG StackLayoutPhase is only accessing a union'ed calleeVariable. This test should not crash."
+);
+
+// Regression test for <https://webkit.org/b/130566>.
+function test()
+{
+    function doTest() {
+        (function foo(a) {
+            if (a > 0) {
+                foo(a  - 1);
+            }
+        }) (424);
+    }
+
+    for (var i = 0; i < 1000; i++) {
+        try {
+            doTest();
+        } catch(runError) {
+        }
+    }
+}
+
+test();

Modified: trunk/Source/_javascript_Core/ChangeLog (166063 => 166064)


--- trunk/Source/_javascript_Core/ChangeLog	2014-03-21 15:22:45 UTC (rev 166063)
+++ trunk/Source/_javascript_Core/ChangeLog	2014-03-21 16:04:31 UTC (rev 166064)
@@ -1,3 +1,13 @@
+2014-03-21  Mark Lam  <[email protected]>
+
+        StackLayoutPhase should find the union'ed calleeVariable before accessing its machineLocal.
+        <https://webkit.org/b/130566>
+
+        Reviewed by Filip Pizlo.
+
+        * dfg/DFGStackLayoutPhase.cpp:
+        (JSC::DFG::StackLayoutPhase::run):
+
 2014-03-20  Filip Pizlo  <[email protected]>
 
         FTL should correctly compile GetByVal on Uint32Array that claims to return non-int32 values

Modified: trunk/Source/_javascript_Core/dfg/DFGStackLayoutPhase.cpp (166063 => 166064)


--- trunk/Source/_javascript_Core/dfg/DFGStackLayoutPhase.cpp	2014-03-21 15:22:45 UTC (rev 166063)
+++ trunk/Source/_javascript_Core/dfg/DFGStackLayoutPhase.cpp	2014-03-21 16:04:31 UTC (rev 166064)
@@ -197,9 +197,10 @@
             
             RELEASE_ASSERT(inlineCallFrame->isClosureCall == !!data.calleeVariable);
             if (inlineCallFrame->isClosureCall) {
+                VariableAccessData* variable = data.calleeVariable->find();
                 ValueSource source = ValueSource::forFlushFormat(
-                    data.calleeVariable->machineLocal(),
-                    data.calleeVariable->flushFormat());
+                    variable->machineLocal(),
+                    variable->flushFormat());
                 inlineCallFrame->calleeRecovery = source.valueRecovery();
             } else
                 RELEASE_ASSERT(inlineCallFrame->calleeRecovery.isConstant());
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to