library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:61:9: Error: Constant evaluation error:
//   const ClassWithFunction<Object>(objectFunction); // ok in weak mode
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'objectFunction' to be of type 'Object Function(Object)', but was of type 'Object? Function(Object?)'.
//  - 'Object' is from 'dart:core'.
//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
//                                                          ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:65:9: Error: Constant evaluation error:
//   const Class<num>(''); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:16:46: Context: Expected constant '""' to be of type 'num', but was of type 'String'.
//   const Class(dynamic value) : field = value as T;
//                                              ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:66:9: Error: Constant evaluation error:
//   const Class<int>(0.5); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:16:46: Context: Expected constant '0.5' to be of type 'int', but was of type 'double'.
//   const Class(dynamic value) : field = value as T;
//                                              ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:67:9: Error: Constant evaluation error:
//   const Class<String>(0); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:16:46: Context: Expected constant '0' to be of type 'String', but was of type 'int'.
//   const Class(dynamic value) : field = value as T;
//                                              ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:68:9: Error: Constant evaluation error:
//   const ClassWithBound<double>(); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:22:42: Context: Expected constant '3' to be of type 'double', but was of type 'int'.
//   const ClassWithBound() : field = three as T;
//                                          ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:69:9: Error: Constant evaluation error:
//   const ClassWithBound<double>.withValue(0); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:24:65: Context: Expected constant '0' to be of type 'double', but was of type 'int'.
//   const ClassWithBound.withValue(dynamic value) : field = value as T;
//                                                                 ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:70:9: Error: Constant evaluation error:
//   const ClassWithBound<double>.withValue(three); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:24:65: Context: Expected constant '3' to be of type 'double', but was of type 'int'.
//   const ClassWithBound.withValue(dynamic value) : field = value as T;
//                                                                 ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:71:9: Error: Constant evaluation error:
//   const ClassWithBound<num>.withValue(''); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:24:65: Context: Expected constant '""' to be of type 'num', but was of type 'String'.
//   const ClassWithBound.withValue(dynamic value) : field = value as T;
//                                                                 ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:72:9: Error: Constant evaluation error:
//   const ClassWithList(0); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:30:54: Context: Expected constant '0' to be of type 'List<dynamic>', but was of type 'int'.
//  - 'List' is from 'dart:core'.
//   const ClassWithList(dynamic value) : field = value as List<T>;
//                                                      ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:73:9: Error: Constant evaluation error:
//   const ClassWithList<num>(<String>['']); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:30:54: Context: Expected constant '<String>[""]' to be of type 'List<num>', but was of type 'List<String>'.
//  - 'List' is from 'dart:core'.
//   const ClassWithList(dynamic value) : field = value as List<T>;
//                                                      ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:74:9: Error: Constant evaluation error:
//   const ClassWithList<int>(<num>[0]); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:30:54: Context: Expected constant '<num>[0]' to be of type 'List<int>', but was of type 'List<num>'.
//  - 'List' is from 'dart:core'.
//   const ClassWithList(dynamic value) : field = value as List<T>;
//                                                      ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:75:9: Error: Constant evaluation error:
//   const ClassWithList<String>(<int>[0]); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:30:54: Context: Expected constant '<int>[0]' to be of type 'List<String>', but was of type 'List<int>'.
//  - 'List' is from 'dart:core'.
//   const ClassWithList(dynamic value) : field = value as List<T>;
//                                                      ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:76:9: Error: Constant evaluation error:
//   const ClassWithFunction(0); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant '0' to be of type 'dynamic Function(dynamic)', but was of type 'int'.
//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
//                                                          ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:77:9: Error: Constant evaluation error:
//   const ClassWithFunction(intFunction); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'intFunction' to be of type 'dynamic Function(dynamic)', but was of type 'int Function(int)'.
//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
//                                                          ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:78:9: Error: Constant evaluation error:
//   const ClassWithFunction<Object>(intFunction); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'intFunction' to be of type 'Object Function(Object)', but was of type 'int Function(int)'.
//  - 'Object' is from 'dart:core'.
//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
//                                                          ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:79:9: Error: Constant evaluation error:
//   const ClassWithFunction<void>(intFunction); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'intFunction' to be of type 'void Function(void)', but was of type 'int Function(int)'.
//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
//                                                          ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:80:9: Error: Constant evaluation error:
//   const ClassWithFunction<num>(intFunction); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'intFunction' to be of type 'num Function(num)', but was of type 'int Function(int)'.
//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
//                                                          ^
//
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:81:9: Error: Constant evaluation error:
//   const ClassWithFunction<int>(idFunction); // error
//         ^
// pkg/front_end/testcases/nnbd/potentially_constant_type_as.dart:36:58: Context: Expected constant 'idFunction' to be of type 'int Function(int)', but was of type 'T Function<T>(T)'.
//   const ClassWithFunction(dynamic value) : field = value as T Function(T);
//                                                          ^
//
import self as self;
import "dart:core" as core;

class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field self::Class::T% field;
  const constructor •(dynamic value) → self::Class<self::Class::T%>
    : self::Class::field = value as{ForNonNullableByDefault} self::Class::T%, super core::Object::•()
    ;
}
class ClassWithBound<T extends core::num = core::num> extends core::Object /*hasConstConstructor*/  {
  final field self::ClassWithBound::T field;
  const constructor •() → self::ClassWithBound<self::ClassWithBound::T>
    : self::ClassWithBound::field = (#C1) as{ForNonNullableByDefault} self::ClassWithBound::T, super core::Object::•()
    ;
  const constructor withValue(dynamic value) → self::ClassWithBound<self::ClassWithBound::T>
    : self::ClassWithBound::field = value as{ForNonNullableByDefault} self::ClassWithBound::T, super core::Object::•()
    ;
}
class ClassWithList<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field core::List<self::ClassWithList::T%> field;
  const constructor •(dynamic value) → self::ClassWithList<self::ClassWithList::T%>
    : self::ClassWithList::field = value as{ForNonNullableByDefault} core::List<self::ClassWithList::T%>, super core::Object::•()
    ;
}
class ClassWithFunction<T extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field (self::ClassWithFunction::T%) → self::ClassWithFunction::T% field;
  const constructor •(dynamic value) → self::ClassWithFunction<self::ClassWithFunction::T%>
    : self::ClassWithFunction::field = value as{ForNonNullableByDefault} (self::ClassWithFunction::T%) → self::ClassWithFunction::T%, super core::Object::•()
    ;
}
static const field core::num three = #C1;
static const field (core::int) → core::int idAsIntFunction = #C3;
static method dynamicFunction(dynamic d) → dynamic
  return d;
static method objectFunction(core::Object? o) → core::Object?
  return o;
static method intFunction(core::int i) → core::int
  return i;
static method idFunction<T extends core::Object? = dynamic>(self::idFunction::T% t) → self::idFunction::T%
  return t;
static method main() → void {
  #C5;
  #C6;
  #C7;
  #C9;
  #C10;
  #C11;
  #C10;
  #C13;
  #C15;
  #C17;
  #C18;
  #C20;
  #C22;
  #C23;
  #C25;
  #C26;
  #C28;
  #C29;
}
static method weakMode() → dynamic {
  invalid-expression "Expected constant 'objectFunction' to be of type 'Object Function(Object)', but was of type 'Object? Function(Object?)'.
 - 'Object' is from 'dart:core'.";
}
static method errors() → dynamic {
  invalid-expression "Expected constant '\"\"' to be of type 'num', but was of type 'String'.";
  invalid-expression "Expected constant '0.5' to be of type 'int', but was of type 'double'.";
  invalid-expression "Expected constant '0' to be of type 'String', but was of type 'int'.";
  invalid-expression "Expected constant '3' to be of type 'double', but was of type 'int'.";
  invalid-expression "Expected constant '0' to be of type 'double', but was of type 'int'.";
  invalid-expression "Expected constant '3' to be of type 'double', but was of type 'int'.";
  invalid-expression "Expected constant '\"\"' to be of type 'num', but was of type 'String'.";
  invalid-expression "Expected constant '0' to be of type 'List<dynamic>', but was of type 'int'.
 - 'List' is from 'dart:core'.";
  invalid-expression "Expected constant '<String>[\"\"]' to be of type 'List<num>', but was of type 'List<String>'.
 - 'List' is from 'dart:core'.";
  invalid-expression "Expected constant '<num>[0]' to be of type 'List<int>', but was of type 'List<num>'.
 - 'List' is from 'dart:core'.";
  invalid-expression "Expected constant '<int>[0]' to be of type 'List<String>', but was of type 'List<int>'.
 - 'List' is from 'dart:core'.";
  invalid-expression "Expected constant '0' to be of type 'dynamic Function(dynamic)', but was of type 'int'.";
  invalid-expression "Expected constant 'intFunction' to be of type 'dynamic Function(dynamic)', but was of type 'int Function(int)'.";
  invalid-expression "Expected constant 'intFunction' to be of type 'Object Function(Object)', but was of type 'int Function(int)'.
 - 'Object' is from 'dart:core'.";
  invalid-expression "Expected constant 'intFunction' to be of type 'void Function(void)', but was of type 'int Function(int)'.";
  invalid-expression "Expected constant 'intFunction' to be of type 'num Function(num)', but was of type 'int Function(int)'.";
  invalid-expression "Expected constant 'idFunction' to be of type 'int Function(int)', but was of type 'T Function<T>(T)'.";
}

constants  {
  #C1 = 3
  #C2 = tearoff self::idFunction
  #C3 = partial-instantiation self::idFunction <core::int>
  #C4 = 0
  #C5 = self::Class<dynamic> {field:#C4}
  #C6 = self::Class<core::num> {field:#C4}
  #C7 = self::Class<core::int> {field:#C4}
  #C8 = ""
  #C9 = self::Class<core::String> {field:#C8}
  #C10 = self::ClassWithBound<core::int> {field:#C1}
  #C11 = self::ClassWithBound<core::int> {field:#C4}
  #C12 = 0.5
  #C13 = self::ClassWithBound<core::double> {field:#C12}
  #C14 = <dynamic>[]
  #C15 = self::ClassWithList<dynamic> {field:#C14}
  #C16 = <core::int>[#C4]
  #C17 = self::ClassWithList<core::num> {field:#C16}
  #C18 = self::ClassWithList<core::int> {field:#C16}
  #C19 = <core::String>[#C8]
  #C20 = self::ClassWithList<core::String> {field:#C19}
  #C21 = tearoff self::dynamicFunction
  #C22 = self::ClassWithFunction<dynamic> {field:#C21}
  #C23 = self::ClassWithFunction<core::Object?> {field:#C21}
  #C24 = tearoff self::objectFunction
  #C25 = self::ClassWithFunction<dynamic> {field:#C24}
  #C26 = self::ClassWithFunction<void> {field:#C24}
  #C27 = tearoff self::intFunction
  #C28 = self::ClassWithFunction<core::int> {field:#C27}
  #C29 = self::ClassWithFunction<core::int> {field:#C3}
}


Constructor coverage from constants:
org-dartlang-testcase:///potentially_constant_type_as.dart:
- Class. (from org-dartlang-testcase:///potentially_constant_type_as.dart:16:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- ClassWithBound. (from org-dartlang-testcase:///potentially_constant_type_as.dart:22:9)
- ClassWithBound.withValue (from org-dartlang-testcase:///potentially_constant_type_as.dart:24:9)
- ClassWithList. (from org-dartlang-testcase:///potentially_constant_type_as.dart:30:9)
- ClassWithFunction. (from org-dartlang-testcase:///potentially_constant_type_as.dart:36:9)
