library test;
import self as self;
import "dart:core" as core;

static method test() → dynamic async {
  core::String s;
  for (final dynamic #t1 in let final dynamic #t2 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:10:46: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
  for (int x in /*@error=InvalidAssignment*/ s) {}
                                             ^") {
    core::int x = #t1 as{TypeError} core::int;
  }
  await for (final dynamic #t3 in let final dynamic #t4 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:11:52: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
  await for (int x in /*@error=InvalidAssignment*/ s) {}
                                                   ^") {
    core::int x = #t3 as{TypeError} core::int;
  }
  core::int y;
  for (final dynamic #t5 in let final dynamic #t6 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:13:42: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.core::Iterable<dynamic>'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::Iterable<dynamic>'.
  for (y in /*@error=InvalidAssignment*/ s) {}
                                         ^") {
    y = #t5 as{TypeError} core::int;
  }
  await for (final dynamic #t7 in let final dynamic #t8 = s in let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_invalid_iterable.dart:14:48: Error: A value of type 'dart.core::String' can't be assigned to a variable of type 'dart.async::Stream<dynamic>'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.async::Stream<dynamic>'.
  await for (y in /*@error=InvalidAssignment*/ s) {}
                                               ^") {
    y = #t7 as{TypeError} core::int;
  }
}
static method main() → dynamic {}
