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

class C<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T%>
    : super core::Object::•()
    ;
  static synthetic method _#new#tearOff<T extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::T%>
    return new self::C::•<self::C::_#new#tearOff::T%>();
}
static const field <T extends core::Object? = dynamic>() → self::C<T%> constructorTearOff = #C1;
static method main() → dynamic {
  const () → self::C<core::int> instantiatedTearOff = #C2;
  const () → self::C<core::int> instantiatedTearOff2 = #C2;
  core::print(core::identical(instantiatedTearOff, instantiatedTearOff2));
  core::print(core::identical(#C3, #C3));
}

constants  {
  #C1 = static-tearoff self::C::_#new#tearOff
  #C2 = instantiation #C1 <core::int>
  #C3 = instantiation #C1 <core::String>
}

Extra constant evaluation status:
Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47108.dart:13:9 -> BoolConstant(true)
Evaluated: StaticInvocation @ org-dartlang-testcase:///issue47108.dart:16:9 -> BoolConstant(true)
Extra constant evaluation: evaluated: 5, effectively constant: 2
