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

class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → void
    : super self::A::•()
    ;
}
static method f<T extends core::Object>() → self::f::T
  return null;
static method test() → dynamic async {
  core::Iterable<self::A> iterable;
  asy::Stream<self::A> stream;
  self::A a;
  self::B b;
  core::int i;
  for (final self::A #t1 in iterable) {
    a = #t1;
  }
  await for (final self::A #t2 in stream) {
    a = #t2;
  }
  for (final self::A #t3 in iterable) {
    b = #t3 as{TypeError} self::B;
  }
  await for (final self::A #t4 in stream) {
    b = #t4 as{TypeError} self::B;
  }
  for (final self::A #t5 in iterable) {
    i = let final dynamic #t6 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:26:39: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
  for (i /*@error=InvalidAssignment*/ in iterable) {}
                                      ^" in let final dynamic #t7 = #t5 in null;
  }
  await for (final self::A #t8 in stream) {
    i = let final dynamic #t9 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/inference_new/for_each_outer_var_type.dart:27:45: Error: A value of type 'test::A' can't be assigned to a variable of type 'dart.core::int'.
Try changing the type of the left hand side, or casting the right hand side to 'dart.core::int'.
  await for (i /*@error=InvalidAssignment*/ in stream) {}
                                            ^" in let final dynamic #t10 = #t8 in null;
  }
  for (final self::A #t11 in self::f<core::Iterable<self::A>>()) {
    a = #t11;
  }
  await for (final self::A #t12 in self::f<asy::Stream<self::A>>()) {
    a = #t12;
  }
}
static method main() → dynamic {}
