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:15: 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:15: Error: Couldn't find constructor 'Bad.baz'.
  Bad.bar() : this.baz();
              ^^^^"
    ;
}
class M extends core::Object {
  synthetic constructor •() → self::M*
    : super core::Object::•()
    ;
}
abstract class _MixinApplication&Super&M extends self::Super implements self::M /*isAnonymousMixin,isEliminatedMixin*/  {
  synthetic constructor _() → self::_MixinApplication&Super&M*
    : super self::Super::_()
    ;
}
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();
                           ^^^^^"
    ;
}
static method main() → dynamic {}
