/*
 * 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 It's not a compile error to read definitely unassigned local
 * variable in the form var x;
 *
 * @description Checks that it's not a compile error to read definitely
 * unassigned local variable in the form var x;. Test indirect read via compound
 * assignment
 *
 * @author sgrekhov@unipro.ru
 */
// Requirements=nnbd-strong
import "../../Utils/expect.dart";

main() {
  var x1;
  Expect.throws(() { x1 *= 2; });

  var x2;
  Expect.throws(() { x2 /= 2; });

  var x3;
  Expect.throws(() { x3 ~/= 2; });

  var x4;
  Expect.throws(() { x4 %= 2; });

  var x5;
  Expect.throws(() { x5 += 2; });

  var x6;
  Expect.throws(() { x6 -= 2; });

  var x7;
  Expect.throws(() { x7 <<= 2; });

  var x8;
  Expect.throws(() { x8 >>= 2; });

  var x9;
  Expect.throws(() { x1 &= 2; });

  var x10;
  Expect.throws(() { x10 ^= 2; });

  var x11;
  Expect.throws(() { x11 |= 2; });

  var x12;
  x12 ??= 2;
  Expect.equals(2, x12);
}
