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

Reply via email to