blob: 362631eb2f894fd490dfbbe4ef99fcd72ea89777 [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// Test lazy deoptimization from within an inlined function.
// VMOptions=--deoptimize_alot
call_native(x) {
// Wrap in try to avoid inlining.
// Use a large int so the intrinsifier does not fire.
try { return x + 12342353257893275483274832; } finally { }
}
bar(x) {
if (x < 0) call_native(x);
x = 42;
return x;
}
foo(x) {
x = bar(x);
return x;
}
main() {
Expect.equals(42, foo(1));
for (var i = 0; i < 2000; i++) foo(7);
Expect.equals(42, foo(2));
// Call the runtime to trigger lazy deopt with foo/bar on the stack.
Expect.equals(42, foo(-1));
}