// Unhandled errors:
//
// pkg/front_end/testcases/constructor_initializer_invalid.dart:5:24: Error: Expected an initializer.
// class C1 { int f; C1() : ; }
//                        ^
//
// pkg/front_end/testcases/constructor_initializer_invalid.dart:6:26: Error: Expected an assignment after the field name.
// To initialize a field, use the syntax 'name = value'.
// class C2 { int f; C2() : f; }
//                          ^
//
// pkg/front_end/testcases/constructor_initializer_invalid.dart:7:26: Error: Expected an assignment after the field name.
// To initialize a field, use the syntax 'name = value'.
// class C3 { int f; C3() : f++; }
//                          ^

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

class C1 extends core::Object {
  field core::int f = null;
  constructor •() → self::C1
    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_initializer_invalid.dart:5:26: Error: This couldn't be parsed.
class C1 { int f; C1() : ; }
                         ^"
    ;
}
class C2 extends core::Object {
  field core::int f;
  constructor •() → self::C2
    : self::C2::f = invalid-expression "pkg/front_end/testcases/constructor_initializer_invalid.dart:6:27: Error: This couldn't be parsed.
class C2 { int f; C2() : f; }
                          ^", super core::Object::•()
    ;
}
class C3 extends core::Object {
  field core::int f = null;
  constructor •() → self::C3
    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/constructor_initializer_invalid.dart:7:26: Error: This couldn't be parsed.
class C3 { int f; C3() : f++; }
                         ^"
    ;
}
static method main() → dynamic {
  dynamic c1 = new self::C1::•();
  c1.toString();
  dynamic c2 = new self::C2::•();
  c2.toString();
  dynamic c3 = new self::C3::•();
  c3.toString();
}
