haikuwebkit/LayoutTests/js/dfg-inline-constructor-that...

210 lines
3.9 KiB
Plaintext
Raw Permalink Normal View History

DFG shouldn't treat the 'this' argument as being captured if a code block uses arguments https://bugs.webkit.org/show_bug.cgi?id=106398 <rdar://problem/12439776> Source/JavaScriptCore: Reviewed by Mark Hahnenberg. This is a possible optimization for inlined calls, and fixes crashes for inlined constructors, in the case that the inlined code used arguments. The problem was that assuming that 'this' was captured implies the assumption that it was initialized by the caller, which is wrong for constructors and this. Also added a pretty essential DFG IR validation rule: we shouldn't have any live locals at the top of the root block. This helps to catch this bug: our assumption that 'this' was captured in an inlined constructor that used arguments led to liveness for the temporary that would have held 'this' in the caller being propagated all the way up to the entrypoint of the function. * bytecode/CodeBlock.h: (JSC::CodeBlock::isCaptured): * dfg/DFGValidate.cpp: (JSC::DFG::Validate::validate): (JSC::DFG::Validate::reportValidationContext): (Validate): (JSC::DFG::Validate::dumpGraphIfAppropriate): LayoutTests: Reviewed by Mark Hahnenberg. * fast/js/dfg-inline-constructor-that-uses-arguments-expected.txt: Added. * fast/js/dfg-inline-constructor-that-uses-arguments.html: Added. * fast/js/jsc-test-list: * fast/js/script-tests/dfg-inline-constructor-that-uses-arguments.js: Added. (Foo): (bar): Canonical link: https://commits.webkit.org/124587@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@139136 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2013-01-09 01:11:32 +00:00
Tests that we can inline a constructor that uses arguments without failing DFG validation.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS bar().x is 42
PASS successfullyParsed is true
TEST COMPLETE