// 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 ??= /*@ typeArgs=B* */ f();
  local += /*@ typeArgs=dynamic */ f();
  local *= /*@ typeArgs=dynamic */ f();
  local &= /*@ typeArgs=dynamic */ f();
  --local;
  local--;
  var /*@ type=B* */ v1 = local = /*@ typeArgs=B* */ f();
  var /*@ type=B* */ v2 = local ??= /*@ typeArgs=B* */ f();
  var /*@ type=B* */ v4 = local *= /*@ typeArgs=dynamic */ f();
  var /*@ type=C* */ v5 = local &= /*@ typeArgs=dynamic */ f();
  var /*@ type=B* */ v6 = --local;
  var /*@ type=B* */ v7 = local--;
}

main() {}
