// Copyright (c) 2018, 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.

// Verifies that VM is able to handle certain cases of unreachable code.

// VMOptions=--no_background_compilation --optimization_counter_threshold=10

import "package:expect/expect.dart";

class A {
  dynamic next;
}

test1(A arg1, bool? arg2, bool? arg3) {
  assert(arg1.next == (arg2 ?? arg3));
}

test2(A arg1, bool? arg2, bool? arg3) {
  print(((throw 'Error') as dynamic).next == (arg2 ?? arg3));
}

void doTests() {
  test1(new A(), null, null);
  Expect.throws(() {
    test2(new A(), null, null);
  });
}

void main() {
  for (int i = 0; i < 20; i++) {
    doTests();
  }
}
