v8/test/mjsunit/regress/regress-crbug-465298.js
mstarzinger e6a923ab56 [turbofan] Fix various issues with --turbo-inlining enabled.
This is in preparation to enabling --turbo-inlining by default, fixing
various issues when general purpose inlining is running against our
entire test suite.

R=bmeurer@chromium.org
BUG=v8:4493
LOG=n

Review URL: https://codereview.chromium.org/1407533004

Cr-Commit-Position: refs/heads/master@{#31294}
2015-10-15 12:02:06 +00:00

56 lines
1.4 KiB
JavaScript

// Copyright 2015 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: --noturbo-osr --noturbo-inlining --expose-debug-as debug
var stdlib = this;
var buffer = new ArrayBuffer(64 * 1024);
var foreign = { thrower: thrower, debugme: debugme }
// Get the Debug object exposed from the debug context global object.
Debug = debug.Debug;
var listenerCalled = false;
function listener(event, exec_state, event_data, data) {
try {
if (event == Debug.DebugEvent.Break) {
var frame = exec_state.frame(1);
assertEquals(m.foo, frame.func().value());
listenerCalled = true;
}
} catch (e) {
print("Caught: " + e + " " + e.stack);
};
}
function thrower() { throw "boom"; }
function debugme() { Debug.setListener(listener); debugger; }
function Module(stdlib, foreign, heap) {
"use asm";
var thrower = foreign.thrower;
var debugme = foreign.debugme;
function foo(i) {
i = i|0;
var a = 101; // Local variables exist ...
var b = 102; // ... to make the debugger ...
var c = 103; // ... inspect them during break.
if (i > 0) {
debugme();
i = 23;
} else {
thrower();
i = 42;
}
return i|0;
}
return { foo: foo };
}
var m = Module(stdlib, foreign, buffer);
assertThrows("m.foo(0)");
assertEquals(23, m.foo(1));
assertTrue(listenerCalled);