/*
 * Copyright (c) 2020, 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 In legacy mode, an override of operator== with no explicit
 * parameter type inherits the parameter type of the overridden method if any
 * override of operator== between the overriding method and Object.== has an
 * explicit parameter type. Otherwise, the parameter type of the overriding
 * method is dynamic.
 *
 * @description Checks that in legacy mode, an override of operator== with no
 * explicit parameter type inherits the parameter type of the overridden method
 * if any override of operator== between the overriding method and Object.== has
 * an explicit parameter type
 * @author sgrekhov@unipro.ru
 * @issue 41283
 */
// Requirements=nnbd-strong

class A {
  bool operator ==(covariant A other) => true;
}

class C extends A {
  bool operator ==(other) => true;
}

main() {
  C c = new C();
  A a = new A();
  c == a;
  c == "c";
//     ^^^
// [analyzer] unspecified
// [cfe] unspecified
}
