// Copyright (c) 2019, 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.
//
// Regression test for dartbug.com/35887.
//
// The call specializer inserts a "CheckNull" into main() here, but CheckNull
// was broken in JIT because it didn't create a deopt-info to hold the
// environment in case the it was inside a try/catch block.
//
// VMOptions=--optimization_counter_threshold=10 --no-background-compilation

import 'package:expect/expect.dart';

class Value {
  const Value(this.val);

  final int val;
}

const int limit = 50;

Value maybeWrap(int i) => i < limit ? new Value(i) : null;

Future<void> test() async {
  for (int i = 0; i < 60; ++i) {
    if (maybeWrap(i).val == -1) {
      // never mind we just do something with it
      print(i);
    }
  }
}

void main() {
  test().catchError((e) {});
}
