library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
//       . /*@target=B::m*/ m(null, null);
//                          ^
//
import self as self;
import "dart:core" as core;

abstract class I<E extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::I<self::I::E*>*
    : super core::Object::•()
    ;
  abstract method m(dynamic a, (dynamic, self::I::E*) →* core::String* f) → core::String*;
}
abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<self::A::E*> /*hasConstConstructor*/  {
  const constructor •() → self::A<self::A::E*>*
    : super core::Object::•()
    ;
  abstract method m(dynamic a, (dynamic, self::A::E*) →* core::String* f) → core::String*;
}
abstract class M extends core::Object {
  final field core::int* y = 0;
  synthetic constructor •() → self::M*
    : super core::Object::•()
    ;
}
class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M /*hasConstConstructor*/  {
  const constructor •() → self::B<self::B::E*>*
    : super self::A::•()
    ;
  get y() → core::int*
    return 0;
  method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String* {}
}
static method foo() → dynamic {
  core::int* y = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart:30:26: Error: A value of type 'String' can't be assigned to a variable of type 'int'.
      . /*@target=B::m*/ m(null, null);
                         ^" in new self::B::•<dynamic>().{self::B::m}(null, null) as{TypeError} core::int*;
  core::String* z = new self::B::•<dynamic>().{self::B::m}(null, null);
}
static method main() → dynamic {}
