library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:12:7: Error: Can't mix 'Aoo' in because it's marked with '?'.
// class Coo extends Boo with Aoo? {}
//       ^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:14:7: Error: Can't extend 'Aoo' because it's marked with '?'.
// class Doo extends Aoo? {}
//       ^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:16:7: Error: Can't implement 'Boo' because it's marked with '?'.
// class Eoo implements Boo? {}
//       ^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:18:7: Error: Can't extend 'Boo' because it's marked with '?'.
// class Foo extends Boo? with Aoo {}
//       ^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Error: Can't extend 'Boo' because it's marked with '?'.
// class Goo = Boo? with Aoo?;
//       ^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Error: Can't mix 'Aoo' in because it's marked with '?'.
// class Goo = Boo? with Aoo?;
//       ^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:22:7: Error: Can't implement 'Boo' because it's marked with '?'.
// class Hoo extends Object with Aoo implements Boo? {}
//       ^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:24:7: Error: Can't implement 'Boo' because it's marked with '?'.
// class Ioo = Object with Aoo implements Boo?;
//       ^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Error: Can't extend 'Aoo' because it's marked with '?'.
// mixin Moo1 on Aoo? implements Boo? {}
//       ^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Error: Can't implement 'Boo' because it's marked with '?'.
// mixin Moo1 on Aoo? implements Boo? {}
//       ^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Error: Can't extend 'Aoo' because it's marked with '?'.
// mixin Moo2 on Aoo?, Boo? {}
//       ^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Error: Can't extend 'Boo' because it's marked with '?'.
// mixin Moo2 on Aoo?, Boo? {}
//       ^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Error: Can't implement 'Aoo' because it's marked with '?'.
// mixin Moo3 implements Aoo?, Boo? {}
//       ^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Error: Can't implement 'Boo' because it's marked with '?'.
// mixin Moo3 implements Aoo?, Boo? {}
//       ^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:50:17: Error: Type 'void' can't be used here.
// Try removing 'void' keyword or replace it with 'var', 'final', or a type.
// class NooVoid = void with Aoo;
//                 ^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:50:17: Error: Type 'void' not found.
// class NooVoid = void with Aoo;
//                 ^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:7: Error: The type 'Never' can't be mixed in.
// class Joo extends Boo with Never {}
//       ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:7: Error: The type 'Never' can't be mixed in.
// class Ooo = Aoo with Never;
//       ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:28: Error: The type 'Never' can't be used as supertype.
// class Joo extends Boo with Never {}
//                            ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used as supertype.
// class Koo extends Never {}
//                   ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used as supertype.
// class Loo implements Never {}
//                      ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used as supertype.
// mixin Moo4 on Aoo implements Never {}
//                              ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used as supertype.
// mixin Moo5 on Aoo, Never {}
//                    ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used as supertype.
// mixin Moo6 on Never {}
//               ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used as supertype.
// mixin Moo7 implements Aoo, Never {}
//                            ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used as supertype.
// mixin Moo8 implements Never {}
//                       ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used as supertype.
// class Noo = Never with Aoo;
//             ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:20: Error: The type 'dynamic' can't be used as supertype.
// class NooDynamic = dynamic with Aoo;
//                    ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:22: Error: The type 'Never' can't be used as supertype.
// class Ooo = Aoo with Never;
//                      ^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used in an 'extends' clause.
// class Koo extends Never {}
//                   ^^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used in an 'implements' clause.
// class Loo implements Never {}
//                      ^^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used in an 'implements' clause.
// mixin Moo4 on Aoo implements Never {}
//                              ^^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used in an 'implements' clause.
// mixin Moo5 on Aoo, Never {}
//                    ^^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used in an 'extends' clause.
// mixin Moo6 on Never {}
//               ^^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used in an 'implements' clause.
// mixin Moo7 implements Aoo, Never {}
//                            ^^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used in an 'implements' clause.
// mixin Moo8 implements Never {}
//                       ^^^^^
//
// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used in an 'extends' clause.
// class Noo = Never with Aoo;
//             ^^^^^
//
import self as self;
import "dart:core" as core;

class Aoo extends core::Object {
  synthetic constructor •() → self::Aoo
    : super core::Object::•()
    ;
}
class Boo extends core::Object {
  synthetic constructor •() → self::Boo
    : super core::Object::•()
    ;
}
abstract class _Coo&Boo&Aoo extends self::Boo implements self::Aoo /*isAnonymousMixin,isEliminatedMixin*/  {
  synthetic constructor •() → self::_Coo&Boo&Aoo
    : super self::Boo::•()
    ;
}
class Coo extends self::_Coo&Boo&Aoo {
  synthetic constructor •() → self::Coo
    : super self::_Coo&Boo&Aoo::•()
    ;
}
class Doo extends self::Aoo {
  synthetic constructor •() → self::Doo
    : super self::Aoo::•()
    ;
}
class Eoo extends core::Object implements self::Boo {
  synthetic constructor •() → self::Eoo
    : super core::Object::•()
    ;
}
abstract class _Foo&Boo&Aoo extends self::Boo implements self::Aoo /*isAnonymousMixin,isEliminatedMixin*/  {
  synthetic constructor •() → self::_Foo&Boo&Aoo
    : super self::Boo::•()
    ;
}
class Foo extends self::_Foo&Boo&Aoo {
  synthetic constructor •() → self::Foo
    : super self::_Foo&Boo&Aoo::•()
    ;
}
class Goo extends self::Boo implements self::Aoo /*isEliminatedMixin*/  {
  synthetic constructor •() → self::Goo
    : super self::Boo::•()
    ;
}
abstract class _Hoo&Object&Aoo extends core::Object implements self::Aoo /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::_Hoo&Object&Aoo
    : super core::Object::•()
    ;
}
class Hoo extends self::_Hoo&Object&Aoo implements self::Boo {
  synthetic constructor •() → self::Hoo
    : super self::_Hoo&Object&Aoo::•()
    ;
}
class Ioo extends core::Object implements self::Boo, self::Aoo /*isEliminatedMixin,hasConstConstructor*/  {
  const synthetic constructor •() → self::Ioo
    : super core::Object::•()
    ;
}
abstract class _Joo&Boo&Never extends self::Boo /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Joo&Boo&Never
    : super self::Boo::•()
    ;
}
class Joo extends self::_Joo&Boo&Never {
  synthetic constructor •() → self::Joo
    : super self::_Joo&Boo&Never::•()
    ;
}
class Koo extends core::Object {
  synthetic constructor •() → self::Koo
    : super core::Object::•()
    ;
}
class Loo extends core::Object {
  synthetic constructor •() → self::Loo
    : super core::Object::•()
    ;
}
abstract class Moo1 extends self::Aoo implements self::Boo /*isMixinDeclaration*/  {
}
abstract class _Moo2&Aoo&Boo extends core::Object implements self::Aoo, self::Boo /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Moo2&Aoo&Boo
    : super core::Object::•()
    ;
}
abstract class Moo2 extends self::_Moo2&Aoo&Boo /*isMixinDeclaration*/  {
}
abstract class Moo3 extends core::Object implements self::Aoo, self::Boo /*isMixinDeclaration*/  {
}
abstract class Moo4 extends self::Aoo /*isMixinDeclaration*/  {
}
abstract class _Moo5&Aoo&Never extends core::Object implements self::Aoo /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Moo5&Aoo&Never
    : super core::Object::•()
    ;
}
abstract class Moo5 extends self::_Moo5&Aoo&Never /*isMixinDeclaration*/  {
}
abstract class Moo6 extends core::Object /*isMixinDeclaration*/  {
}
abstract class Moo7 extends core::Object implements self::Aoo /*isMixinDeclaration*/  {
}
abstract class Moo8 extends core::Object /*isMixinDeclaration*/  {
}
class Noo extends core::Object implements self::Aoo /*isEliminatedMixin*/  {
  synthetic constructor •() → self::Noo
    : super core::Object::•()
    ;
}
class NooDynamic extends core::Object implements self::Aoo /*isEliminatedMixin*/  {
  synthetic constructor •() → self::NooDynamic
    : super core::Object::•()
    ;
}
class NooVoid extends core::Object implements self::Aoo /*isEliminatedMixin*/  {
  synthetic constructor •() → self::NooVoid
    : super core::Object::•()
    ;
}
class Ooo extends self::Aoo {
  synthetic constructor •() → self::Ooo
    : super self::Aoo::•()
    ;
}
static method main() → dynamic {}
