// 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.

// @dart = 2.9

// https://github.com/flutter/flutter/issues/25041

// This test may produce a compile time exception from stack overflow during
// enum initialization or succeed in enum initialization depending on exactly
// how much stack is left and used by the compiler. It should never crash nor
// produce a runtime exception.

enum Fruit {
  apple,
  banana,
}

getFruit() => Fruit.apple;

recurse() {
  try {
    recurse();
  } catch (e, st) {
    print("$e ${getFruit()}");
  }
}

main() {
  try {
    recurse();
  } on StackOverflowError catch (e) {
    // Swallow.
  }
}
