// 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 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 throwInFuture() { var completer = new Completer(); 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]]'; }