Index: test/mjsunit/regress/regress-crbug-417508.js |
diff --git a/test/mjsunit/regress/regress-crbug-417508.js b/test/mjsunit/regress/regress-crbug-417508.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..589fb88443b2a4742e2334d4e5ea2ead6cbcd3bf |
--- /dev/null |
+++ b/test/mjsunit/regress/regress-crbug-417508.js |
@@ -0,0 +1,29 @@ |
+// Copyright 2014 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Flags: --allow-natives-syntax |
+ |
+function foo(x) { |
+ var k = "value"; |
+ return x[k] = 1; |
+} |
+var obj = {}; |
+Object.defineProperty(obj, "value", {set: function(x) { throw "nope"; }}); |
+try { foo(obj); } catch(e) {} |
+try { foo(obj); } catch(e) {} |
+%OptimizeFunctionOnNextCall(foo); |
+try { foo(obj); } catch(e) {} |
+ |
+function bar(x) { |
+ var k = "value"; |
+ return (x[k] = 1) ? "ok" : "nope"; |
+} |
+var obj2 = {}; |
+Object.defineProperty(obj2, "value", |
+ {set: function(x) { throw "nope"; return true; } }); |
+ |
+try { bar(obj2); } catch(e) {} |
+try { bar(obj2); } catch(e) {} |
+%OptimizeFunctionOnNextCall(bar); |
+try { bar(obj2); } catch(e) {} |