library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
//   Sub() : super();
//           ^^^^^
//
// pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
//   Sub.foo() : super.foo();
//               ^^^^^
//
// pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
//   Bad.foo() : this();
//               ^^^^
//
// pkg/front_end/testcases/general/missing_constructor.dart:16:20: Error: Couldn't find constructor 'Bad.baz'.
//   Bad.bar() : this.baz();
//                    ^^^
//
// pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
//   MixinApplication() : super();
//                        ^^^^^
//
// pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
//   MixinApplication.foo() : super.foo();
//                            ^^^^^
//
import self as self;
import "dart:core" as core;

class Super extends core::Object {
  constructor _() → self::Super
    : super core::Object::•()
    ;
}
class Sub extends self::Super {
  constructor •() → self::Sub
    : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:10:11: Error: Superclass has no constructor named 'Super'.
  Sub() : super();
          ^^^^^"
    ;
  constructor foo() → self::Sub
    : final dynamic #t2 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:11:15: Error: Superclass has no constructor named 'Super.foo'.
  Sub.foo() : super.foo();
              ^^^^^"
    ;
}
class Bad extends core::Object {
  constructor foo() → self::Bad
    : final dynamic #t3 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:15:15: Error: Couldn't find constructor 'Bad'.
  Bad.foo() : this();
              ^^^^"
    ;
  constructor bar() → self::Bad
    : final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:16:20: Error: Couldn't find constructor 'Bad.baz'.
  Bad.bar() : this.baz();
                   ^^^"
    ;
}
abstract class M extends core::Object /*isMixinDeclaration*/  {
}
class MixinApplication extends self::_MixinApplication&Super&M {
  constructor •() → self::MixinApplication
    : final dynamic #t5 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:22:24: Error: Superclass has no constructor named 'Super'.
  MixinApplication() : super();
                       ^^^^^"
    ;
  constructor foo() → self::MixinApplication
    : final dynamic #t6 = invalid-expression "pkg/front_end/testcases/general/missing_constructor.dart:23:28: Error: Superclass has no constructor named 'Super.foo'.
  MixinApplication.foo() : super.foo();
                           ^^^^^"
    ;
}
abstract class _MixinApplication&Super&M = self::Super with self::M /*isAnonymousMixin*/  {
  synthetic constructor _() → self::_MixinApplication&Super&M
    : super self::Super::_()
    ;
}
static method main() → dynamic {}
