// 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 no error if the object being iterated over by a
/// for-in loop has a static type which is dynamic, or a subtype of
/// Iterable<dynamic>
/// @author sgrekhov@unipro.ru

// Requirements=nnbd-strong

class C {
}

main() {
  C c = C();
  dynamic d = [c, Object()];
  List<C> list1 = [C(), C(), C()];
  List<C?> list2 = [C(), null, C()];

  for (var o in d) {}
  for (C c in list1) {}
  for (C? c in list2) {}
  for (var o in [Object(), Object()]) {}
  for (var o in [Object(), null, c]) {}
}
