//@ skip if $architecture == "x86" "use strict"; var n = 10000000; function shouldThrowTDZ(func) { var hasThrown = false; try { func(); } catch(e) { if (e.name.indexOf("ReferenceError") !== -1) hasThrown = true; } if (!hasThrown) throw new Error("Did not throw TDZ error"); } function bar(f) { } function foo(b) { let result = 0; var set = function (x) { result = x; return tdzPerpetrator; } if (b) { OSRExit(); if (b) { bar(set); return tdzPerpetrator; } } let tdzPerpetrator; return result; } noInline(bar); noInline(foo); noInline(shouldThrowTDZ); for (var i = 0; i < n; i++) { var bool = !(i % 100); if (bool) shouldThrowTDZ(function() { foo(bool); }); else { var result = foo(bool); if (result != 0) throw "Error: bad result: " + result; } }