library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class A<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field core::List<self::A::X%> x;
  const constructor •(dynamic x) → self::A<self::A::X%>
    : self::A::x = x is{ForNonNullableByDefault} core::List<self::A::X%> ?{core::List<self::A::X%>} x{core::List<self::A::X%>} : x as{ForNonNullableByDefault} core::List<self::A::X%>, super core::Object::•()
    ;
}
class B<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field (self::B::X%) → void f;
  const constructor •() → self::B<self::B::X%>
    : self::B::f = #C1<self::B::X%>, super core::Object::•()
    ;
}
class C<X extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/  {
  final field dynamic f;
  const constructor •() → self::C<self::C::X%>
    : self::C::f = #C1<self::C::X%>, super core::Object::•()
    ;
}
static method m<X extends core::Object? = dynamic>(self::m::X% x) → void {}
static method main() → void {
  #C4;
  core::print((#C6.{self::B::f}{(core::String) → void} as{TypeError,CovarianceCheck,ForNonNullableByDefault} (core::String) → void).{core::Object::runtimeType}{core::Type});
  core::print(#C7.{self::C::f}{dynamic}.{core::Object::runtimeType}{core::Type});
}

constants  {
  #C1 = static-tearoff self::m
  #C2 = 1
  #C3 = <core::int>[#C2]
  #C4 = self::A<core::int> {x:#C3}
  #C5 = instantiation #C1 <core::String>
  #C6 = self::B<core::String> {f:#C5}
  #C7 = self::C<core::String> {f:#C5}
}


Constructor coverage from constants:
org-dartlang-testcase:///issue47154c.dart:
- A. (from org-dartlang-testcase:///issue47154c.dart:8:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
- B. (from org-dartlang-testcase:///issue47154c.dart:16:9)
- C. (from org-dartlang-testcase:///issue47154c.dart:22:9)
