// Unhandled errors:
//
// pkg/front_end/testcases/type_variable_uses.dart:24:13: Error: Type variables can't be used as constants.
//     const C<T>();
//             ^
//
// pkg/front_end/testcases/type_variable_uses.dart:25:12: Error: Type variables can't be used as constants.
//     const <T>[];
//            ^
//
// pkg/front_end/testcases/type_variable_uses.dart:26:14: Error: Type variables can't be used as constants.
//     const <C<T>>[];
//              ^
//
// pkg/front_end/testcases/type_variable_uses.dart:27:20: Error: Type variables can't be used as constants.
//     const <Object>[T];
//                    ^
//
// pkg/front_end/testcases/type_variable_uses.dart:28:28: Error: Type variables can't be used as constants.
//     const <Object>[const C<T>()];
//                            ^

library;
import self as self;
import "dart:core" as core;

class C<T extends core::Object = dynamic> extends core::Object {
  const constructor •() → void
    : super core::Object::•()
    ;
  static method staticMethod() → self::C<dynamic> {
    core::print(invalid-type);
    invalid-type t;
    self::C<invalid-type> l;
    self::C<self::C<invalid-type>> ll;
    const self::C::•<invalid-type>();
    const <invalid-type>[];
    const <self::C<invalid-type>>[];
    const <core::Object>[invalid-type];
    const <core::Object>[const self::C::•<invalid-type>()];
  }
  method instanceMethod() → self::C<self::C::T> {
    core::print(self::C::T);
    self::C::T t;
    self::C<self::C::T> l;
    self::C<self::C<self::C::T>> ll;
    const self::C::•<invalid-type>();
    const <invalid-type>[];
    const <self::C<invalid-type>>[];
    const <core::Object>[invalid-type];
    const <core::Object>[const self::C::•<invalid-type>()];
  }
}
static method main() → dynamic {}
