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

leftExpression() {
  late List<int> v;
  /*unassigned*/ v[0] = (v = [1, 2])[1];
  v;
}

leftLocal_compound() {
  late int v;
  /*unassigned*/ v += 1;
}

leftLocal_compound_assignInRight() {
  late int v;
  /*unassigned*/ v += (v = /*unassigned*/ v);
}

leftLocal_pure_eq() {
  late int v;
  v = 0;
}

leftLocal_pure_eq_self() {
  late int v;
  v = /*unassigned*/ v;
}

leftLocal_pure_questionEq() {
  late int v;
  /*unassigned*/ v ??= 0;
}

leftLocal_pure_questionEq_self() {
  late int v;
  /*unassigned*/ v ??= /*unassigned*/ v;
}

questionEq_rhs_not_guaranteed_to_execute() {
  late int v;
  int? i;
  /*unassigned*/ i ??= (v = 0);
  v;
}
