library;
//
// Problems in library:
//
// pkg/front_end/testcases/general_nnbd_opt_out/extend_with_type_variable.dart:15:7: Error: The type 'M' can't be mixed in.
// class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
//       ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/extend_with_type_variable.dart:13:7: Error: The type variable 'S' can't be used as supertype.
// class Class1<T, S extends SuperClass> extends S with Mixin<T> {}
//       ^
//
// pkg/front_end/testcases/general_nnbd_opt_out/extend_with_type_variable.dart:15:7: Error: The type variable 'M' can't be used as supertype.
// class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
//       ^
//
import self as self;
import "dart:core" as core;

class SuperClass extends core::Object {
  synthetic constructor •() → self::SuperClass*
    ;
}
abstract class Mixin<T extends core::Object* = dynamic> extends core::Object /*isMixinDeclaration*/  {
}
abstract class _Class1&S&Mixin<T extends core::Object* = dynamic, S extends self::SuperClass* = self::SuperClass*> = core::Object with self::Mixin<self::_Class1&S&Mixin::T*> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Class1&S&Mixin<self::_Class1&S&Mixin::T*, self::_Class1&S&Mixin::S*>*
    ;
}
class Class1<T extends core::Object* = dynamic, S extends self::SuperClass* = self::SuperClass*> extends self::_Class1&S&Mixin<self::Class1::T*, self::Class1::S*> {
  synthetic constructor •() → self::Class1<self::Class1::T*, self::Class1::S*>*
    ;
}
abstract class _Class2&SuperClass&M<T extends core::Object* = dynamic, M extends self::Mixin<self::_Class2&SuperClass&M::T*>* = self::Mixin<dynamic>*> extends self::SuperClass /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Class2&SuperClass&M<self::_Class2&SuperClass&M::T*, self::_Class2&SuperClass&M::M*>*
    : super self::SuperClass::•()
    ;
}
class Class2<T extends core::Object* = dynamic, M extends self::Mixin<self::Class2::T*>* = self::Mixin<dynamic>*> extends self::_Class2&SuperClass&M<self::Class2::T*, self::Class2::M*> {
  synthetic constructor •() → self::Class2<self::Class2::T*, self::Class2::M*>*
    ;
}
static method main() → dynamic
  ;
