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
    ;
}
class Boo extends core::Object {
  synthetic constructor •() → self::Boo
    ;
}
abstract class _Coo&Boo&Aoo = self::Boo with self::Aoo /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Coo&Boo&Aoo
    : super self::Boo::•()
    ;
}
class Coo extends self::_Coo&Boo&Aoo {
  synthetic constructor •() → self::Coo
    ;
}
class Doo extends self::Aoo {
  synthetic constructor •() → self::Doo
    ;
}
class Eoo extends core::Object implements self::Boo {
  synthetic constructor •() → self::Eoo
    ;
}
abstract class _Foo&Boo&Aoo = self::Boo with self::Aoo /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Foo&Boo&Aoo
    : super self::Boo::•()
    ;
}
class Foo extends self::_Foo&Boo&Aoo {
  synthetic constructor •() → self::Foo
    ;
}
class Goo = self::Boo with self::Aoo {
  synthetic constructor •() → self::Goo
    : super self::Boo::•()
    ;
}
abstract class _Hoo&Object&Aoo = core::Object with self::Aoo /*isAnonymousMixin,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
    ;
}
class Ioo = core::Object with self::Aoo implements self::Boo /*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
    ;
}
class Koo extends core::Object {
  synthetic constructor •() → self::Koo
    ;
}
class Loo extends core::Object {
  synthetic constructor •() → self::Loo
    ;
}
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
    ;
}
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
    ;
}
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 = core::Object with self::Aoo {
  synthetic constructor •() → self::Noo
    ;
}
class NooDynamic = core::Object with self::Aoo {
  synthetic constructor •() → self::NooDynamic
    ;
}
class NooVoid = core::Object with self::Aoo {
  synthetic constructor •() → self::NooVoid
    ;
}
class Ooo extends self::Aoo {
  synthetic constructor •() → self::Ooo
    : super self::Aoo::•()
    ;
}
static method main() → dynamic
  ;
