// 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.

/*@testedFeatures=inference*/
library test;

class A {}

class B extends A {
  A operator +(C v) => null;
  B operator -(int i) => null;
  B operator *(B v) => null;
  C operator &(A v) => null;
}

class C extends B {}

T f<T>() => null;

void test() {
  B local;
  local = /*@ typeArgs=B* */ f();

  local /*@target=A::==*/ ??= /*@ typeArgs=B* */ f();

  local /*@ target=B::+ */ += /*@ typeArgs=C* */ f();

  local /*@ target=B::* */ *= /*@ typeArgs=B* */ f();

  local /*@ target=B::& */ &= /*@ typeArgs=A* */ f();

  /*@ target=B::- */ --local;

  local /*@ target=B::- */ --;

  var /*@ type=B* */ v1 = local = /*@ typeArgs=B* */ f();

  var /*@ type=B* */ v2 =
      local /*@target=A::==*/ ??= /*@ typeArgs=B* */ f();

  var /*@ type=A* */ v3 = local
      /*@ target=B::+ */ += /*@ typeArgs=C* */ f();

  var /*@ type=B* */ v4 = local
      /*@ target=B::* */ *= /*@ typeArgs=B* */ f();

  var /*@ type=C* */ v5 = local
      /*@ target=B::& */ &= /*@ typeArgs=A* */ f();

  var /*@ type=B* */ v6 = /*@ target=B::- */ --local;

  var /*@ type=B* */ v7 = /*@ type=B* */ local
      /*@ type=B* */ /*@ target=B::- */ --;
}

main() {}
