library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:32:10: Error: Expected an identifier, but got 'super'.
//     for (super.superInstanceField in []) {}
//          ^^^^^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:33:10: Error: Expected an identifier, but got 'super'.
//     for (super.untypedSuperInstanceField in []) {}
//          ^^^^^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:35:11: Error: Unexpected token '.'.
//     for (c.instanceField in []) {}
//           ^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:36:11: Error: Unexpected token '.'.
//     for (c.untypedSuperInstanceField in []) {}
//           ^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:38:20: Error: Unexpected token '.'.
//     for (unresolved.foo in []) {}
//                    ^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:39:11: Error: Unexpected token '.'.
//     for (c.unresolved in []) {}
//           ^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:40:14: Error: Unexpected token '('.
//     for (main() in []) {}
//              ^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:40:10: Error: Can't assign to this, so it can't be used in a for-in loop.
//     for (main() in []) {}
//          ^^^^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:41:15: Error: Unexpected token ','.
//     for (var x, y in <int>[]) {
//               ^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
//     for (var x, y in <int>[]) {
//          ^^^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:46:10: Error: Can't assign to the const variable 'constant'.
//     for (constant in []) {}
//          ^^^^^^^^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:37:10: Error: The setter 'unresolved' isn't defined for the class 'C'.
//  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
//     for (unresolved in []) {}
//          ^^^^^^^^^^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:38:10: Error: The getter 'unresolved' isn't defined for the class 'C'.
//  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
// Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
//     for (unresolved.foo in []) {}
//          ^^^^^^^^^^
//
// pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
//  - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
//     for (c.unresolved in []) {}
//            ^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class Super extends core::Object {
  field core::int* superInstanceField = null;
  field dynamic untypedSuperInstanceField = null;
  synthetic constructor •() → self::Super*
    : super core::Object::•()
    ;
  abstract member-signature get _identityHashCode() → core::int*;
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*;
  abstract member-signature operator ==(dynamic other) → core::bool*;
  abstract member-signature get hashCode() → core::int*;
  abstract member-signature method toString() → core::String*;
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic;
  abstract member-signature get runtimeType() → core::Type*;
}
class C extends self::Super {
  field core::int* instanceField = null;
  field dynamic untypedInstanceField = null;
  static field core::double* staticField = null;
  static field dynamic untypedStaticField = null;
  synthetic constructor •() → self::C*
    : super self::Super::•()
    ;
  method m() → dynamic {
    core::String* local;
    dynamic untypedLocal;
    for (final core::String* #t1 in <core::String*>[]) {
      local = #t1;
    }
    for (final dynamic #t2 in <dynamic>[]) {
      untypedLocal = #t2;
    }
    for (final core::int* #t3 in <core::int*>[]) {
      this.{self::C::instanceField} = #t3;
    }
    for (final dynamic #t4 in <dynamic>[]) {
      this.{self::C::untypedInstanceField} = #t4;
    }
    for (final core::double* #t5 in <core::double*>[]) {
      self::C::staticField = #t5;
    }
    for (final dynamic #t6 in <dynamic>[]) {
      self::C::untypedStaticField = #t6;
    }
    for (final core::bool* #t7 in <core::bool*>[]) {
      self::topLevelField = #t7;
    }
    for (final dynamic #t8 in <dynamic>[]) {
      self::untypedTopLevelField = #t8;
    }
    for (final core::int* #t9 in <core::int*>[]) {
      super.{self::Super::superInstanceField} = #t9;
    }
    for (final dynamic #t10 in <dynamic>[]) {
      super.{self::Super::untypedSuperInstanceField} = #t10;
    }
    self::C* c = new self::C::•();
    for (final core::int* #t11 in <core::int*>[]) {
      c.{self::C::instanceField} = #t11;
    }
    for (final dynamic #t12 in <dynamic>[]) {
      c.{self::Super::untypedSuperInstanceField} = #t12;
    }
    for (final dynamic #t13 in <dynamic>[]) {
      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:37:10: Error: The setter 'unresolved' isn't defined for the class 'C'.
 - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
    for (unresolved in []) {}
         ^^^^^^^^^^";
    }
    for (final dynamic #t14 in <dynamic>[]) {
      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:38:10: Error: The getter 'unresolved' isn't defined for the class 'C'.
 - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'unresolved'.
    for (unresolved.foo in []) {}
         ^^^^^^^^^^".foo = #t14;
    }
    for (final dynamic #t15 in <dynamic>[]) {
      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:39:12: Error: The setter 'unresolved' isn't defined for the class 'C'.
 - 'C' is from 'pkg/front_end/testcases/general/for_in_without_declaration.dart'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'unresolved'.
    for (c.unresolved in []) {}
           ^^^^^^^^^^";
    }
    {
      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:40:10: Error: Can't assign to this, so it can't be used in a for-in loop.
    for (main() in []) {}
         ^^^^";
      for (final dynamic #t16 in <dynamic>[]) {
        invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:40:10: Error: Can't assign to this, so it can't be used in a for-in loop.
    for (main() in []) {}
         ^^^^";
        self::main();
      }
    }
    {
      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
    for (var x, y in <int>[]) {
         ^^^";
      for (final core::int* #t17 in <core::int*>[]) {
        invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:41:10: Error: A for-in loop can't have more than one loop variable.
    for (var x, y in <int>[]) {
         ^^^";
        dynamic x;
        dynamic y;
        core::print(x);
        core::print(y);
      }
    }
    for (final dynamic #t18 in <dynamic>[]) {
      invalid-expression "pkg/front_end/testcases/general/for_in_without_declaration.dart:46:10: Error: Can't assign to the const variable 'constant'.
    for (constant in []) {}
         ^^^^^^^^";
    }
  }
}
static field core::bool* topLevelField;
static field dynamic untypedTopLevelField;
static method main() → dynamic {}
