Title: [106495] branches/safari-534.54-branch/Source/_javascript_Core

Diff

Modified: branches/safari-534.54-branch/Source/_javascript_Core/ChangeLog (106494 => 106495)


--- branches/safari-534.54-branch/Source/_javascript_Core/ChangeLog	2012-02-01 22:05:01 UTC (rev 106494)
+++ branches/safari-534.54-branch/Source/_javascript_Core/ChangeLog	2012-02-01 22:12:27 UTC (rev 106495)
@@ -1,3 +1,26 @@
+2011-02-01  Lucas Forschler  <[email protected]>
+
+    Merge 106207
+
+    2012-01-29  Filip Pizlo  <[email protected]>
+
+            REGRESSION (r105576-r105582): Web Inspector Crash in JSC::JSValue::toString(JSC::ExecState*) const
+            https://bugs.webkit.org/show_bug.cgi?id=77146
+            <rdar://problem/10770586>
+
+            Reviewed by Oliver Hunt.
+
+            The old JIT expects that the result of the last operation is in the lastResultRegister.  The DFG JIT is
+            designed to correctly track the lastResultRegister by looking at SetLocal nodes.  However, when the DFG
+            JIT inlines a code block, it forgets that the inlined code block's result would have been placed in the
+            lastResultRegister.  Hence if we OSR exit on the first node following the end of an inlined code block
+            that had a return value, and that first node uses the return value, the old JIT will get massively
+            confused.  This patch takes a surgical approach: instead of making the DFG smarter, it makes the old
+            JIT slightly dumber.
+
+            * jit/JITCall.cpp:
+            (JSC::JIT::emit_op_call_put_result):
+
 2011-01-27  Lucas Forschler  <[email protected]>
 
     Merge 106067

Modified: branches/safari-534.54-branch/Source/_javascript_Core/jit/JITCall.cpp (106494 => 106495)


--- branches/safari-534.54-branch/Source/_javascript_Core/jit/JITCall.cpp	2012-02-01 22:05:01 UTC (rev 106494)
+++ branches/safari-534.54-branch/Source/_javascript_Core/jit/JITCall.cpp	2012-02-01 22:12:27 UTC (rev 106495)
@@ -52,6 +52,8 @@
     int dst = instruction[1].u.operand;
     emitValueProfilingSite(FirstProfilingSite);
     emitPutVirtualRegister(dst);
+    if (canBeOptimized())
+        killLastResultRegister(); // Make lastResultRegister tracking simpler in the DFG.
 }
 
 void JIT::compileLoadVarargs(Instruction* instruction)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to