library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   a == c_dynamic; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   a == c_int; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   a == c_string; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
//  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   a == d; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   b == c_dynamic; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   b == c_int; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   b == c_string; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
//  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   b == d; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_dynamic == a; // error
//                ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
//  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_dynamic == b; // error
//                ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_int == a; // error
//            ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
//  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_int == b; // error
//            ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_int == c_dynamic; // ok
//            ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_int == c_string; // error
//            ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_string == a; // error
//               ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
//  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_string == b; // error
//               ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_string == c_dynamic; // ok
//               ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_string == c_int; // error
//               ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
//  - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   c_string == d; // error
//               ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
//  - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   d == a; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
//  - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   d == b; // error
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   d == c_dynamic; // ok
//        ^
//
// pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
//  - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
//   d == c_string; // error
//        ^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  operator ==(covariant-by-declaration self::A other) → core::bool
    return true;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
  operator ==(covariant-by-declaration self::A other) → core::bool
    return true;
}
class C<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T%>
    : super core::Object::•()
    ;
  operator ==(covariant-by-declaration covariant-by-class self::C<self::C::T%> other) → core::bool
    return true;
}
class D extends self::C<core::int> {
  synthetic constructor •() → self::D
    : super self::C::•()
    ;
}
static method main() → dynamic {}
static method test(self::A a, self::B b, self::C<dynamic> c_dynamic, self::C<core::int> c_int, self::C<core::String> c_string, self::D d) → dynamic {
  a =={self::A::==}{(self::A) → core::bool} a;
  a =={self::A::==}{(self::A) → core::bool} b;
  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:24:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  a == c_dynamic; // error
       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:25:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  a == c_int; // error
       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:26:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  a == c_string; // error
       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
  a =={self::A::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:27:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
 - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  a == d; // error
       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
  b =={self::B::==}{(self::A) → core::bool} a;
  b =={self::B::==}{(self::A) → core::bool} b;
  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:31:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'A?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  b == c_dynamic; // error
       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::A?;
  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:32:8: Error: The argument type 'C<int>' can't be assigned to the parameter type 'A?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  b == c_int; // error
       ^" in c_int as{TypeError,ForNonNullableByDefault} self::A?;
  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:33:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'A?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  b == c_string; // error
       ^" in c_string as{TypeError,ForNonNullableByDefault} self::A?;
  b =={self::B::==}{(self::A) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:34:8: Error: The argument type 'D' can't be assigned to the parameter type 'A?'.
 - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  b == d; // error
       ^" in d as{TypeError,ForNonNullableByDefault} self::A?;
  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:36:16: Error: The argument type 'A' can't be assigned to the parameter type 'C<dynamic>?'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_dynamic == a; // error
               ^" in a as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:37:16: Error: The argument type 'B' can't be assigned to the parameter type 'C<dynamic>?'.
 - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_dynamic == b; // error
               ^" in b as{TypeError,ForNonNullableByDefault} self::C<dynamic>?;
  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_dynamic;
  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_int;
  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} c_string;
  c_dynamic =={self::C::==}{(self::C<dynamic>) → core::bool} d;
  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:43:12: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_int == a; // error
           ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:44:12: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
 - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_int == b; // error
           ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:45:12: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_int == c_dynamic; // ok
           ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
  c_int =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
  c_int =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:47:12: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_int == c_string; // error
           ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
  c_int =={self::C::==}{(self::C<core::int>) → core::bool} d;
  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:50:15: Error: The argument type 'A' can't be assigned to the parameter type 'C<String>?'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_string == a; // error
              ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:51:15: Error: The argument type 'B' can't be assigned to the parameter type 'C<String>?'.
 - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_string == b; // error
              ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:52:15: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<String>?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_string == c_dynamic; // ok
              ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:53:15: Error: The argument type 'C<int>' can't be assigned to the parameter type 'C<String>?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_string == c_int; // error
              ^" in c_int as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
  c_string =={self::C::==}{(self::C<core::String>) → core::bool} c_string;
  c_string =={self::C::==}{(self::C<core::String>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:55:15: Error: The argument type 'D' can't be assigned to the parameter type 'C<String>?'.
 - 'D' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  c_string == d; // error
              ^" in d as{TypeError,ForNonNullableByDefault} self::C<core::String>?;
  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:57:8: Error: The argument type 'A' can't be assigned to the parameter type 'C<int>?'.
 - 'A' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  d == a; // error
       ^" in a as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:58:8: Error: The argument type 'B' can't be assigned to the parameter type 'C<int>?'.
 - 'B' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  d == b; // error
       ^" in b as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:59:8: Error: The argument type 'C<dynamic>' can't be assigned to the parameter type 'C<int>?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  d == c_dynamic; // ok
       ^" in c_dynamic as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
  d =={self::C::==}{(self::C<core::int>) → core::bool} c_int;
  d =={self::C::==}{(self::C<core::int>) → core::bool} invalid-expression "pkg/front_end/testcases/general/covariant_equals.dart:61:8: Error: The argument type 'C<String>' can't be assigned to the parameter type 'C<int>?'.
 - 'C' is from 'pkg/front_end/testcases/general/covariant_equals.dart'.
  d == c_string; // error
       ^" in c_string as{TypeError,ForNonNullableByDefault} self::C<core::int>?;
  d =={self::C::==}{(self::C<core::int>) → core::bool} d;
}
