/*
 * Copyright (c) 2021, 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.
 */
/**
 * @assertion At this location about an asynchronous non-generator function with
 * future value type $T_v$, the text is changed as follows:
 *
 *  It is a compile-time error if $s$ is \code{\RETURN{};},
 *  unless $T_v$
 *  is \VOID, \DYNAMIC, or \code{Null}.
 *  %
 *  It is a compile-time error if $s$ is \code{\RETURN{} $e$;},
 *  $T_v$ is \VOID,
 *  and \flatten{S} is neither \VOID, \DYNAMIC, \code{Null}.
 *  %
 *  It is a compile-time error if $s$ is \code{\RETURN{} $e$;},
 *  $T_v$ is neither \VOID{} nor \DYNAMIC,
 *  and \flatten{S} is \VOID.
 *  %
 *  It is a compile-time error if $s$ is \code{\RETURN{} $e$;},
 *  \flatten{S} is not \VOID,
 *  $S$ is not assignable to $T_v$,
 *  and flatten{S} is not a subtype of $T_v$.
 *  Comparing to Dart before null-safety, this means that it is no longer
 *  allowed to return an expression whose flattened static type is void in an
 *  async function with future value type Null; nor is it allowed, in an async
 *  function with future value type void, to return an expression whose
 *  flattened static type is not void, void*, dynamic, or Null. Conversely, it
 *  is allowed to return a future when the future value type is a suitable
 *  future; for instance, we can have return Future<int>.value(42) in an async
 *  function with declared return type Future<Future<int>>. Finally, let S be
 *  Future<dynamic> or FutureOr<dynamic>; it is then no longer allowed to return
 *  an expression with static type S, unless the future value type is a
 *  supertype of S. This differs from Dart before null-safety in that it was
 *  allowed to return an expression of these types with a declared return type
 *  of the form Future<T> for any T.
 *
 * @description Check that it is a compile-time error to return an expression
 * with static type S, unless the future value type is a supertype of S where S
 * be Future<dynamic> or FutureOr<dynamic>
 * @author sgrekhov@unipro.ru
 */
import "dart:async";
Future<Future<int>> f1() async {
  return new Future<dynamic>.value(42);
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}

Future<Future<int>> f2() async {
  return new FutureOr<dynamic>.value(42);
//       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}

main() {
  f1();
}
