// Copyright (c) 2015, 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.
// VMOptions=--stacktrace-every=3 --optimization-counter-threshold=10 --no-background-compilation

// @dart = 2.9

// Test generating stacktraces with inlining and deferred code.
// Regression test for issue dartbug.com/22331

class A {
  final N;
  final inc;
  var next;
  A(this.N, this.inc) {
    next = this;
  }
}

foo(o, value) {
  for (var i = 0; i < o.N; i += o.inc) {
    if (value < i) {
      throw "";
    }
    o = o.next;
  }
  return value;
}

@pragma('vm:never-inline')
baz(x, y, z) => z;

bar(o) {
  var value = 0x100000000 + o.inc;
  baz(0, 0, foo(o, value));
}

main() {
  var o = new A(10, 1);
  for (var i = 0; i < 100; i++) bar(o);
  bar(new A(100000, 1));
}
