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

static method test() → dynamic async {
  core::Object* o;
  for (dynamic x in o as{TypeError} core::Iterable<dynamic>*) {
  }
  await for (dynamic x in o as{TypeError} asy::Stream<dynamic>*) {
  }
  core::int* y;
  for (final dynamic #t1 in o as{TypeError} core::Iterable<dynamic>*) {
    y = #t1 as{TypeError} core::int*;
  }
  await for (final dynamic #t2 in o as{TypeError} asy::Stream<dynamic>*) {
    y = #t2 as{TypeError} core::int*;
  }
}
static method main() → dynamic {}
