// 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
/*@testedFeatures=inference*/
library test;

int getInt() => 0;
num getNum() => 0;
double getDouble() => 0.0;

void test1(int t) {
  var /*@ type=int* */ v1 = t = getInt();

  var /*@ type=num* */ v2 = t = getNum();

  var /*@ type=int* */ v4 = t ??= getInt();

  var /*@ type=num* */ v5 = t ??= getNum();

  var /*@ type=int* */ v7 = t /*@target=num.+*/ += getInt();

  var /*@ type=num* */ v8 = t /*@target=num.+*/ += getNum();

  var /*@ type=int* */ v10 = /*@target=num.+*/ ++t;

  var /*@ type=int* */ v11 =
      /*@ type=int* */ t /*@ type=int* */ /*@target=num.+*/ ++;
}

void test2(num t) {
  var /*@ type=int* */ v1 = t = getInt();

  var /*@ type=num* */ v2 = t = getNum();

  var /*@ type=double* */ v3 = t = getDouble();

  var /*@ type=num* */ v4 = t ??= getInt();

  var /*@ type=num* */ v5 = t ??= getNum();

  var /*@ type=num* */ v6 = t ??= getDouble();

  var /*@ type=num* */ v7 = t /*@target=num.+*/ += getInt();

  var /*@ type=num* */ v8 = t /*@target=num.+*/ += getNum();

  var /*@ type=num* */ v9 = t /*@target=num.+*/ += getDouble();

  var /*@ type=num* */ v10 = /*@target=num.+*/ ++t;

  var /*@ type=num* */ v11 =
      /*@ type=num* */ t /*@ type=num* */ /*@target=num.+*/ ++;
}

void test3(double t) {
  var /*@ type=num* */ v2 = t = getNum();

  var /*@ type=double* */ v3 = t = getDouble();

  var /*@ type=num* */ v5 = t ??= getNum();

  var /*@ type=double* */ v6 = t ??= getDouble();

  var /*@ type=double* */ v7 = t /*@target=double.+*/ += getInt();

  var /*@ type=double* */ v8 = t /*@target=double.+*/ += getNum();

  var /*@ type=double* */ v9 = t /*@target=double.+*/ += getDouble();

  var /*@ type=double* */ v10 = /*@target=double.+*/ ++t;

  var /*@ type=double* */ v11 =
      /*@ type=double* */ t /*@ type=double* */ /*@target=double.+*/ ++;
}

main() {}
