library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:26:18: Error: Type variables can't be used as constants.
//       : field1 = T,
//                  ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:27:21: Error: Constant expression expected.
// Try inserting 'const'.
//         field5 = <T>[],
//                     ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:27:19: Error: Type variables can't be used as constants.
//         field5 = <T>[],
//                   ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:28:21: Error: Constant expression expected.
// Try inserting 'const'.
//         field6 = <T>{},
//                     ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:28:19: Error: Type variables can't be used as constants.
//         field6 = <T>{},
//                   ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:29:24: Error: Constant expression expected.
// Try inserting 'const'.
//         field7 = <T, T>{},
//                        ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:29:19: Error: Type variables can't be used as constants.
//         field7 = <T, T>{},
//                   ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:29:22: Error: Type variables can't be used as constants.
//         field7 = <T, T>{},
//                      ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:30:23: Error: Type variables can't be used as constants.
//         field8 = o is T,
//                       ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:31:29: Error: Type variables can't be used as constants.
//         field9 = o is Class<T>,
//                             ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:32:24: Error: Type variables can't be used as constants.
//         field10 = o as T,
//                        ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:33:30: Error: Type variables can't be used as constants.
//         field11 = o as Class<T>,
//                              ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
//         field15 = <Class<T>>[];
//                          ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:29: Error: Constant expression expected.
// Try inserting 'const'.
//         field15 = <Class<T>>[];
//                             ^
//
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

import "org-dartlang-testcase:///potentially_constant_type_lib1.dart";
import "org-dartlang-testcase:///potentially_constant_type_lib2.dart";

class Class<T extends core::Object* = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field dynamic field1;
  final field dynamic field5;
  final field dynamic field6;
  final field dynamic field7;
  final field dynamic field8;
  final field dynamic field9;
  final field dynamic field10;
  final field dynamic field11;
  final field dynamic field15;
  const constructor •(dynamic o) → self::Class<self::Class::T*>*
    : self::Class::field1 = invalid-type, self::Class::field5 = <invalid-type>[], self::Class::field6 = block {
      final core::Set<invalid-type>* #t1 = col::LinkedHashSet::•<invalid-type>();
    } =>#t1, self::Class::field7 = <invalid-type, invalid-type>{}, self::Class::field8 = o is invalid-type, self::Class::field9 = o is self::Class<invalid-type>*, self::Class::field10 = o as invalid-type, self::Class::field11 = o as self::Class<invalid-type>*, self::Class::field15 = <self::Class<invalid-type>*>[], super core::Object::•()
    ;
  method method() → void
    ;
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method id<T extends core::Object* = dynamic>(self::id::T* t) → self::id::T*
  ;
static method main() → dynamic
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:23:18: Error: Type variables can't be used as constants.
//       : field1 = T,
//                  ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:24:21: Error: Constant expression expected.
// Try inserting 'const'.
//         field5 = <T>[],
//                     ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:24:19: Error: Type variables can't be used as constants.
//         field5 = <T>[],
//                   ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:25:21: Error: Constant expression expected.
// Try inserting 'const'.
//         field6 = <T>{},
//                     ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:25:19: Error: Type variables can't be used as constants.
//         field6 = <T>{},
//                   ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:26:24: Error: Constant expression expected.
// Try inserting 'const'.
//         field7 = <T, T>{},
//                        ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:26:19: Error: Type variables can't be used as constants.
//         field7 = <T, T>{},
//                   ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:26:22: Error: Type variables can't be used as constants.
//         field7 = <T, T>{},
//                      ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
//         field15 = <Class<T>>[];
//                          ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:29: Error: Constant expression expected.
// Try inserting 'const'.
//         field15 = <Class<T>>[];
//                             ^
//
import self as self2;
import "dart:core" as core;
import "dart:collection" as col;

class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field dynamic field1;
  final field dynamic field5;
  final field dynamic field6;
  final field dynamic field7;
  final field dynamic field8;
  final field dynamic field9;
  final field dynamic field10;
  final field dynamic field11;
  final field dynamic field15;
  const constructor •(dynamic o) → self2::Class<self2::Class::T%>
    : self2::Class::field1 = invalid-type, self2::Class::field5 = <invalid-type>[], self2::Class::field6 = block {
      final core::Set<invalid-type> #t2 = col::LinkedHashSet::•<invalid-type>();
    } =>#t2, self2::Class::field7 = <invalid-type, invalid-type>{}, self2::Class::field8 = o is{ForNonNullableByDefault} self2::Class::T%, self2::Class::field9 = o is{ForNonNullableByDefault} self2::Class<self2::Class::T%>, self2::Class::field10 = o as{ForNonNullableByDefault} self2::Class::T%, self2::Class::field11 = o{self2::Class::T%} as{ForNonNullableByDefault} self2::Class<self2::Class::T%>, self2::Class::field15 = <self2::Class<invalid-type>>[], super core::Object::•()
    ;
  method method() → void
    ;
}
static method id<T extends core::Object? = dynamic>(self2::id::T% t) → self2::id::T%
  ;
static method main() → dynamic
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:34:21: Error: Constant expression expected.
// Try inserting 'const'.
//         field5 = <T>[],
//                     ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:34:19: Error: Type variables can't be used as constants.
//         field5 = <T>[],
//                   ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:35:21: Error: Constant expression expected.
// Try inserting 'const'.
//         field6 = <T>{},
//                     ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:35:19: Error: Type variables can't be used as constants.
//         field6 = <T>{},
//                   ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:36:24: Error: Constant expression expected.
// Try inserting 'const'.
//         field7 = <T, T>{},
//                        ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:36:19: Error: Type variables can't be used as constants.
//         field7 = <T, T>{},
//                   ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:36:22: Error: Type variables can't be used as constants.
//         field7 = <T, T>{},
//                      ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:44:29: Error: Constant expression expected.
// Try inserting 'const'.
//         field15 = <Class<T>>[],
//                             ^
//
// pkg/front_end/testcases/general/constants/potentially_constant_type_lib2.dart:44:26: Error: Type variables can't be used as constants.
//         field15 = <Class<T>>[],
//                          ^
//
import self as self3;
import "dart:core" as core;
import "dart:collection" as col;

typedef F<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic> = self3::Class<X%>;
typedef G<unrelated X extends core::Object? = dynamic> = self3::Class<core::int>;
class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field dynamic field1;
  final field dynamic field2;
  final field dynamic field3;
  final field dynamic field4;
  final field dynamic field5;
  final field dynamic field6;
  final field dynamic field7;
  final field dynamic field8;
  final field dynamic field9;
  final field dynamic field10;
  final field dynamic field11;
  final field dynamic field12;
  final field dynamic field13;
  final field dynamic field14;
  final field dynamic field15;
  final field dynamic field16;
  const constructor •(dynamic o) → self3::Class<self3::Class::T%>
    : self3::Class::field1 = self3::Class::T%, self3::Class::field2 = self3::Class<self3::Class::T%>, self3::Class::field3 = self3::id<self3::Class::T%>, self3::Class::field4 = self3::id<self3::Class::T%>, self3::Class::field5 = <invalid-type>[], self3::Class::field6 = block {
      final core::Set<invalid-type> #t3 = col::LinkedHashSet::•<invalid-type>();
    } =>#t3, self3::Class::field7 = <invalid-type, invalid-type>{}, self3::Class::field8 = o is{ForNonNullableByDefault} self3::Class::T%, self3::Class::field9 = o is{ForNonNullableByDefault} self3::Class<self3::Class::T%>, self3::Class::field10 = o as{ForNonNullableByDefault} self3::Class::T%, self3::Class::field11 = o{self3::Class::T%} as{ForNonNullableByDefault} self3::Class<self3::Class::T%>, self3::Class::field12 = self3::Class::•<self3::Class::T%>, self3::Class::field13 = self3::Class::•<self3::Class::T%>, self3::Class::field14 = self3::id<self3::Class<self3::Class::T%>>, self3::Class::field15 = <self3::Class<invalid-type>>[], self3::Class::field16 = self3::Class::•<core::int>, super core::Object::•()
    ;
  method method() → void
    ;
}
static method id<T extends core::Object? = dynamic>(self3::id::T% t) → self3::id::T%
  ;
static method main() → dynamic
  ;
static method _#F#new#tearOff<X extends core::Object? = dynamic, unrelated Y extends core::Object? = dynamic>(dynamic o) → self3::Class<self3::_#F#new#tearOff::X%>
  return new self3::Class::•<self3::_#F#new#tearOff::X%>(o);
static method _#G#new#tearOff<unrelated X extends core::Object? = dynamic>(dynamic o) → self3::Class<core::int>
  return new self3::Class::•<core::int>(o);


Extra constant evaluation status:
Evaluated: TypeLiteral @ org-dartlang-testcase:///potentially_constant_type.dart:26:18 -> TypeLiteralConstant(<invalid>)
Evaluated: TypeLiteral @ org-dartlang-testcase:///potentially_constant_type_lib1.dart:23:18 -> TypeLiteralConstant(<invalid>)
Evaluated: StaticTearOff @ org-dartlang-testcase:///potentially_constant_type_lib2.dart:32:18 -> StaticTearOffConstant(id)
Evaluated: StaticTearOff @ org-dartlang-testcase:///potentially_constant_type_lib2.dart:33:19 -> StaticTearOffConstant(id)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///potentially_constant_type_lib2.dart:41:19 -> ConstructorTearOffConstant(Class.)
Evaluated: ConstructorTearOff @ org-dartlang-testcase:///potentially_constant_type_lib2.dart:42:19 -> ConstructorTearOffConstant(Class.)
Evaluated: StaticTearOff @ org-dartlang-testcase:///potentially_constant_type_lib2.dart:43:19 -> StaticTearOffConstant(id)
Evaluated: Instantiation @ org-dartlang-testcase:///potentially_constant_type_lib2.dart:45:19 -> InstantiationConstant(Class.<int*>)
Extra constant evaluation: evaluated: 61, effectively constant: 8
