Title: [145145] trunk
- Revision
- 145145
- Author
- [email protected]
- Date
- 2013-03-07 15:45:27 -0800 (Thu, 07 Mar 2013)
Log Message
DFG should not get corrupted IR in the case of code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way
https://bugs.webkit.org/show_bug.cgi?id=111783
Source/_javascript_Core:
Reviewed by Mark Hahnenberg.
Unreachable code is not touched by CFA and so thinks that even untyped uses are checked.
But dead untyped uses don't need checks and hence don't need to be Phantom'd. The DCE knew
this in findTypeCheckRoot() but not in eliminateIrrelevantPhantomChildren(), leading to a
Phantom node that had another Phantom node as one of its kids.
* dfg/DFGDCEPhase.cpp:
(JSC::DFG::DCEPhase::eliminateIrrelevantPhantomChildren):
LayoutTests:
Reviewed by Mark Hahnenberg.
* fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt: Added.
* fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.html: Added.
* fast/js/jsc-test-list:
* fast/js/script-tests/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js: Added.
(foo.bar):
(foo):
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (145144 => 145145)
--- trunk/LayoutTests/ChangeLog 2013-03-07 23:42:31 UTC (rev 145144)
+++ trunk/LayoutTests/ChangeLog 2013-03-07 23:45:27 UTC (rev 145145)
@@ -1,3 +1,17 @@
+2013-03-07 Filip Pizlo <[email protected]>
+
+ DFG should not get corrupted IR in the case of code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way
+ https://bugs.webkit.org/show_bug.cgi?id=111783
+
+ Reviewed by Mark Hahnenberg.
+
+ * fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt: Added.
+ * fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.html: Added.
+ * fast/js/jsc-test-list:
+ * fast/js/script-tests/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js: Added.
+ (foo.bar):
+ (foo):
+
2013-03-07 Alexey Proskuryakov <[email protected]>
FormData should allow setting filename to empty
Added: trunk/LayoutTests/fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt (0 => 145145)
--- trunk/LayoutTests/fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes-expected.txt 2013-03-07 23:45:27 UTC (rev 145145)
@@ -0,0 +1,1009 @@
+Tests that code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way doesn't result in the IR getting corrupted.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS foo(42)(false) is 5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.html (0 => 145145)
--- trunk/LayoutTests/fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.html (rev 0)
+++ trunk/LayoutTests/fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.html 2013-03-07 23:45:27 UTC (rev 145145)
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script src=""
+<script src=""
+</body>
+</html>
Modified: trunk/LayoutTests/fast/js/jsc-test-list (145144 => 145145)
--- trunk/LayoutTests/fast/js/jsc-test-list 2013-03-07 23:42:31 UTC (rev 145144)
+++ trunk/LayoutTests/fast/js/jsc-test-list 2013-03-07 23:45:27 UTC (rev 145145)
@@ -115,6 +115,7 @@
fast/js/dfg-dead-min-two-args
fast/js/dfg-dead-redundant-get-array-length
fast/js/dfg-dead-speculation
+fast/js/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes
fast/js/dfg-dead-variable-on-exit
fast/js/dfg-double-addition-simplify-to-int.html
fast/js/dfg-double-use-of-post-simplification-double-prediction
Added: trunk/LayoutTests/fast/js/script-tests/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js (0 => 145145)
--- trunk/LayoutTests/fast/js/script-tests/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js (rev 0)
+++ trunk/LayoutTests/fast/js/script-tests/dfg-dead-unreachable-code-with-chain-of-dead-unchecked-nodes.js 2013-03-07 23:45:27 UTC (rev 145145)
@@ -0,0 +1,17 @@
+description(
+"Tests that code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way doesn't result in the IR getting corrupted."
+);
+
+function foo(a) {
+ function bar(p) {
+ if (p) {
+ var x = a; // It's dead and unreachable, and it involves a GetScopeVar(GetScopeRegisters(GetMyScope())).
+ }
+ return 5;
+ }
+ return bar;
+}
+
+// Since the function contains unreachable code we need a higher optimization threshold.
+for (var i = 0; i < 1000; ++i)
+ shouldBe("foo(42)(false)", "5");
Modified: trunk/Source/_javascript_Core/ChangeLog (145144 => 145145)
--- trunk/Source/_javascript_Core/ChangeLog 2013-03-07 23:42:31 UTC (rev 145144)
+++ trunk/Source/_javascript_Core/ChangeLog 2013-03-07 23:45:27 UTC (rev 145145)
@@ -1,5 +1,20 @@
2013-03-07 Filip Pizlo <[email protected]>
+ DFG should not get corrupted IR in the case of code that is dead, unreachable, and contains a chain of nodes that use each other in an untyped way
+ https://bugs.webkit.org/show_bug.cgi?id=111783
+
+ Reviewed by Mark Hahnenberg.
+
+ Unreachable code is not touched by CFA and so thinks that even untyped uses are checked.
+ But dead untyped uses don't need checks and hence don't need to be Phantom'd. The DCE knew
+ this in findTypeCheckRoot() but not in eliminateIrrelevantPhantomChildren(), leading to a
+ Phantom node that had another Phantom node as one of its kids.
+
+ * dfg/DFGDCEPhase.cpp:
+ (JSC::DFG::DCEPhase::eliminateIrrelevantPhantomChildren):
+
+2013-03-07 Filip Pizlo <[email protected]>
+
The DFG fixpoint is not strictly profitable, and should be straight-lined
https://bugs.webkit.org/show_bug.cgi?id=111764
Modified: trunk/Source/_javascript_Core/dfg/DFGDCEPhase.cpp (145144 => 145145)
--- trunk/Source/_javascript_Core/dfg/DFGDCEPhase.cpp 2013-03-07 23:42:31 UTC (rev 145144)
+++ trunk/Source/_javascript_Core/dfg/DFGDCEPhase.cpp 2013-03-07 23:45:27 UTC (rev 145145)
@@ -159,9 +159,8 @@
Edge edge = node->children.child(i);
if (!edge)
continue;
- if (edge.needsCheck())
- continue;
- node->children.removeEdgeFromBag(i--);
+ if (edge.isProved() || edge.useKind() == UntypedUse)
+ node->children.removeEdgeFromBag(i--);
}
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes