// 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-weak
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);
}
