/*
 * 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;
  });
}
