Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1602)

Unified Diff: test/mjsunit/for-in-opt.js

Issue 1413923005: Fix deoptimization at ForInStatement::BodyId() (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: moar test cases Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/full-codegen/x87/full-codegen-x87.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/for-in-opt.js
diff --git a/test/mjsunit/for-in-opt.js b/test/mjsunit/for-in-opt.js
index 67ef2d870e238b16c969184632563c81f9be2a3e..a6ee0ec81e32fdf965b30b831ac714bd64dbb251 100644
--- a/test/mjsunit/for-in-opt.js
+++ b/test/mjsunit/for-in-opt.js
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-// Flags: --harmony-proxies --allow-natives-syntax
+// Flags: --harmony-proxies --allow-natives-syntax --expose-debug-as debug
"use strict";
@@ -84,3 +84,77 @@ f3({__proto__:{x:1}});
%OptimizeFunctionOnNextCall(f3);
f3(undefined);
f3(null);
+
+// Reliable repro for an issue previously flushed out by GC stress.
+var handler2 = {
+ getPropertyDescriptor: function(k) {
+ has_keys.push(k);
+ return {value: 10, configurable: true, writable: false, enumerable: true};
+ }
+}
+var proxy2 = Proxy.create(handler2);
+var o2 = {__proto__: proxy2};
+var p = {x: "x"}
+
+function f4(o, p) {
+ var result = [];
+ for (var i in o) {
+ var j = p.x + "str";
+ result.push(i);
+ }
+ return result;
+}
+function check_f4() {
+ assertEquals(keys, f4(o, p));
+ assertEquals(keys, has_keys);
+ has_keys.length = 0;
+}
+check_f4();
+check_f4();
+%OptimizeFunctionOnNextCall(f4);
+p.y = "y"; // Change map, cause eager deopt.
+check_f4();
+
+// Repro for Turbofan equivalent.
+var x;
+var count = 0;
+
+var Debug = debug.Debug;
+
+function listener(event, exec_state, event_data, data) {
+ if (event == Debug.DebugEvent.Break) {
+ %DeoptimizeFunction(f5);
+ }
+}
+
+var handler3 = {
+ enumerate: function(target) {
+ return ["a", "b"];
+ },
+
+ getPropertyDescriptor: function(k) {
+ if (k == "a") count++;
+ if (x) %ScheduleBreak();
+ return {value: 10, configurable: true, writable: false, enumerable: true};
+ }
+};
+
+var proxy3 = Proxy.create(handler3);
+var o3 = {__proto__: proxy3};
+
+function f5() {
+ for (var p in o3) {
+ print(p);
+ }
+}
+
+x = false;
+
+f5(); f5(); f5();
+%OptimizeFunctionOnNextCall(f5);
+x = true;
+count = 0;
+Debug.setListener(listener);
+f5();
+Debug.setListener(null);
+assertEquals(1, count);
« no previous file with comments | « src/full-codegen/x87/full-codegen-x87.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698