// Formatted problems:
//
// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:39: Error: An equality expression can't be an operand of another equality expression.
// Try re-writing the expression.
// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
//                                       ^
//
// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:40: Error: Expected an identifier, but got ')'.
// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
//                                        ^

// Unhandled errors:
//
// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:39: Error: An equality expression can't be an operand of another equality expression.
// Try re-writing the expression.
// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
//                                       ^
//
// pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:40: Error: Expected an identifier, but got ')'.
// var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
//                                        ^

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

static field dynamic v = self::f.<(dynamic).>(invalid-expression "pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1.dart:9:40: Error: This couldn't be parsed.
var /*@topType=dynamic*/v = (f<dynamic>)(() { return 1; });
                                       ^").call(() → dynamic {
  return 1;
});
static method f<T extends core::Object = dynamic>(() → self::f::T g) → core::List<self::f::T>
  return <self::f::T>[g.call()];
static method main() → dynamic {}
