/*
 * Copyright (c) 2019, 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 is an error if the object being iterated over by a for-in loop
 * has a static type which is not dynamic, and is not a subtype of
 * Iterable<dynamic>
 *
 * @description Check that it is an error if the object being iterated over by a
 * for-in loop has a static type which is not dynamic, and is not a subtype of
 * Iterable<dynamic>
 * @author sgrekhov@unipro.ru
 */

void init() {}
main() {
  Object v1 = new Object();
  Object? v2 = new Object();
  void v3 = init();
  Null v4 = null;

  for (var o in v1) {}
//              ^^
// [analyzer] unspecified
// [cfe] unspecified

  for (var o in v2) {}
//              ^^
// [analyzer] unspecified
// [cfe] unspecified

  for (var o in v3) {}
//              ^^
// [analyzer] unspecified
// [cfe] unspecified

  for (var o in v4) {}
//              ^^
// [analyzer] unspecified
// [cfe] unspecified
}
