/*
 * Copyright (c) 2018, 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 a static error when the type of the iterator expression in a
 * synchronous for-in element may not be assigned to Iterable<T> for some type T
 *
 * @description Checks that it is a static error when the type of the iterator
 * expression in a synchronous for-in element may not be assigned to
 * Iterable<T> for some type T.
 * @author sgrekhov@unipro.ru
 */

main() {
  [for (var i in "not iterable") i];
  //             ^^^^^^^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.FOR_IN_OF_INVALID_TYPE
  // [cfe] The type 'String' used in the 'for' loop must implement 'Iterable<dynamic>'.
  [for (var i in 3.14) i];
  //             ^^^^
  // [analyzer] COMPILE_TIME_ERROR.FOR_IN_OF_INVALID_TYPE
  // [cfe] The type 'double' used in the 'for' loop must implement 'Iterable<dynamic>'.
}
