// Copyright (c) 2017, 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.

// @dart = 2.9

// This test exercises a corner case of override checking that is safe from a
// soundness perspective, but which we haven't decided whether or not to allow
// from a usability perspective.

class A {
  void foo() {}
}

abstract class I {
  void foo([x]);
}

abstract class B extends A implements I {
  // If this class were concrete, there would be a problem, since `new
  // B().foo(42)` would be statically allowed, but would lead to invalid
  // arguments being passed to A.foo.  But since the class is abstract, there is
  // no problem.
}

class C extends B {
  void foo([x]) {
    super.foo();
  }
}

void f(B b) {
  b.foo(42);
}

main() {
  f(new C());
}
