Index: test/mjsunit/arguments-apply-deopt.js |
diff --git a/test/mjsunit/regress/regress-crbug-150545.js b/test/mjsunit/arguments-apply-deopt.js |
similarity index 67% |
copy from test/mjsunit/regress/regress-crbug-150545.js |
copy to test/mjsunit/arguments-apply-deopt.js |
index 8238d2fa0d36ffd40be60628d333f5dcb1f0ba51..f7cb605de4c9e30ca10bf78f573f32125ac00e5c 100644 |
--- a/test/mjsunit/regress/regress-crbug-150545.js |
+++ b/test/mjsunit/arguments-apply-deopt.js |
@@ -27,29 +27,50 @@ |
// Flags: --allow-natives-syntax |
-// Test that we do not generate OSR entry points that have an arguments |
-// stack height different from zero. The OSR machinery cannot generate |
-// frames for that. |
- |
-(function() { |
- "use strict"; |
- |
- var instantReturn = false; |
- function inner() { |
- if (instantReturn) return; |
- assertSame(3, arguments.length); |
- assertSame(1, arguments[0]); |
- assertSame(2, arguments[1]); |
- assertSame(3, arguments[2]); |
+(function ApplyArgumentsDeoptInReceiverMapCheck() { |
+ function invoker(h, r) { |
+ return function XXXXX() { |
Jakob Kummerow
2014/01/10 13:47:03
nit: indentation is inconsistent here and again se
Jarin
2014/01/10 14:14:45
Done.
|
+ var res = h.apply({ fffffff : r(this) }, arguments); |
+ return res; |
+ }; |
} |
- function outer() { |
- inner(1,2,3); |
- // Trigger OSR, if optimization is not disabled. |
- if (%GetOptimizationStatus(outer) != 4) { |
- while (%GetOptimizationCount(outer) == 0) {} |
- } |
+ var y = invoker(m, selfOf); |
+ |
+ function selfOf(c) { |
+ var sssss = c.self_; |
+ return sssss; |
+ } |
+ |
+ function m() { |
+ return this.fffffff; |
+ } |
+ |
+ for (var i = 0; i < 200; i++) { |
Jakob Kummerow
2014/01/10 13:47:03
use a smaller loop count here (say, 3), and %Optim
Jarin
2014/01/10 14:14:45
Done.
|
+ y.apply({ self_ : 3 }); |
+ } |
+ |
+ assertEquals(y.apply({ self_ : 3, uuu : 4 }), 3); |
+})(); |
+ |
+(function ApplyArgumetsDeoptInReceiverExplicit() { |
Jakob Kummerow
2014/01/10 13:47:03
nit: s/Argumets/Arguments/
Jarin
2014/01/10 14:14:45
Done.
|
+ |
+ function f() { return this + 21; } |
+ |
+ function deopt() { |
+ %DeoptimizeFunction(XXXXX); |
+ return 21; |
} |
- outer(); |
+ function XXXXX() { |
+ return f.apply(deopt(), arguments); |
+ }; |
+ |
+ XXXXX(); |
+ XXXXX(); |
+ XXXXX(); |
+ |
+ %OptimizeFunctionOnNextCall(XXXXX); |
+ |
+ assertEquals(42, XXXXX()); |
})(); |