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

// @dart = 2.7

/// Regression test: stack trace could be null when using async-await.
import 'dart:async';

import 'package:expect/expect.dart';

main() async {
  C value = await test();
  Expect.identical(StackTrace.empty, value._s);
}

Future<C> test() async {
  try {
    await throwInFuture();
    return C(StackTrace.fromString("no-throw"));
  } on MyException catch (e, s) {
    return C(s); // Note: s is *no longer* null
  }
}

Future<int> throwInFuture() {
  var completer = new Completer<int>();
  var future = completer.future;
  new Future(() {}).then((_) {
    StackTrace.fromString("hi");
    completer.completeError(new MyException());
  });
  return future;
}

class MyException {}

class C {
  final StackTrace _s; // Global inference used to infer this field as non-null
  C(this._s);

  @override
  String toString() => '[[$_s]]';
}
