// Errors:
//
// pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart:27:73: Error: This expression has type 'void' and can't be used.
//   var /*@type=void*/ y = /*info:USE_OF_VOID_RESULT*/ /*@typeArgs=void*/ run(
//                                                                         ^

library test;
import self as self;
import "dart:core" as core;

static field dynamic x = self::run<dynamic>(self::printRunning);
static method run<T extends core::Object = dynamic>(() → self::run::T f) → self::run::T {
  core::print("running");
  self::run::T t = f.call();
  core::print("done running");
  return t;
}
static method printRunning() → void {
  core::print("running");
}
static method main() → dynamic {
  function printRunning() → void {
    core::print("running");
  }
  dynamic x = self::run<dynamic>(printRunning);
  void y = let dynamic _ = null in let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart:27:73: Error: This expression has type 'void' and can't be used.
  var /*@type=void*/ y = /*info:USE_OF_VOID_RESULT*/ /*@typeArgs=void*/ run(
                                                                        ^" in let final dynamic #t2 = self::run<void>(printRunning) in null;
  x = 123;
  x = "hi";
  y = 123;
  y = "hi";
}
