blob: feda11769dd304be61181fb9fd45817bf2d7b95d [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 --optimization-counter-threshold=10 --no-use-osr
// @dart = 2.9
import "package:expect/expect.dart";
call_native(x) {
// Wrap in try to avoid inlining.
// Use a large int so the intrinsifier does not fire.
try {
return x + 9223372036854775807;
} 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 < 20; 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));
}