// 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 The dynamic semantics specified at this location is changed as
/// follows, where $f$ is the enclosing function with declared return type $T$,
/// and $e$ is the returned expression:
///
///  When $f$ is a synchronous non-generator, evaluation proceeds as follows:
///  The expression $e$ is evaluated to an object $o$.
///  A dynamic error occurs unless the dynamic type of $o$ is a subtype of
///  the actual return type of $f$
///  (\ref{actualTypes}).
///  Then the return statement $s$ completes returning $o$
///  (\ref{statementCompletion}).
///
///  \commentary{%
///  The case where the evaluation of $e$ throws is covered by the general rule
///  which propagates the throwing completion from $e$ to $s$ to the function body.%
///  }
///
///  When $f$ is an asynchronous non-generator with future value type $T_v$
///  (\ref{functions}), evaluation proceeds as follows:
///  The expression $e$ is evaluated to an object $o$.
///  If the run-time type of $o$ is a subtype of \code{Future<$T_v$>},
///  let \code{v} be a fresh variable bound to $o$ and
///  evaluate \code{\AWAIT{} v} to an object $r$;
///  otherwise let $r$ be $o$.
///  A dynamic error occurs unless the dynamic type of $r$
///  is a subtype of the actual value of $T_v$
///  (\ref{actualTypes}).
///  Then the return statement $s$ completes returning $r$
///  (\ref{statementCompletion}).
///
///  \commentary{%
///  The cases where $f$ is a generator cannot occur,
///  because in that case $s$ is a compile-time error.%
///  }
///
/// @description Check that a dynamic error occurs unless the dynamic type of $r$
/// is a subtype of the actual value of $T_v$. Test asynchronous non-generator
/// functions
/// @author sgrekhov@unipro.ru

// Requirements=nnbd-strong
import "../../Utils/expect.dart";

Future<int> f1() async {
  dynamic x = 3.14;
  return x;
}

main() {
  asyncStart();
  f1().catchError((_) {
    asyncEnd();
    return 42;
  });
}
