// Copyright (c) 2014, 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.7

class A {
  bool _flag = false;
  bool get flag => _flag;
}

main() {
  var value1, value2;
  var count = 0;

  for (var x = 0; x < 10; x++) {
    var otherThing = new A();
    for (var dummy = 0; dummy < x; dummy++) {
      otherThing._flag = !otherThing._flag;
    }

    value1 = value2;
    value2 = otherThing;

    if (value1 == null) continue;

    if (value1.flag) count++;
  }

  if (count == 0) throw "FAIL";
}
