library test /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:29:9: Error: The type 'A' of the getter 'G.target' is not a subtype of the type 'B' of the setter 'G.target'.
//  - 'A' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
//  - 'B' is from 'pkg/front_end/testcases/inference_new/property_assign_combiner.dart'.
//   A get target => throw '';
//         ^^^^^^
// pkg/front_end/testcases/inference_new/property_assign_combiner.dart:31:12: Context: This is the declaration of the setter 'G.target'.
//   void set target(B value) {}
//            ^^^^^^
//
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  operator +(core::int value) → self::C
    return throw "";
  operator *(self::D value) → self::C
    return throw "";
}
class B extends core::Object {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  operator +(core::int value) → self::E
    return throw "";
  operator *(self::F value) → self::E
    return throw "";
}
class C extends self::B {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
}
class D extends core::Object {
  synthetic constructor •() → self::D
    : super core::Object::•()
    ;
}
class E extends core::Object {
  synthetic constructor •() → self::E
    : super core::Object::•()
    ;
}
class F extends core::Object {
  synthetic constructor •() → self::F
    : super core::Object::•()
    ;
}
class G extends core::Object {
  synthetic constructor •() → self::G
    : super core::Object::•()
    ;
  get target() → self::A
    return throw "";
  set target(self::B value) → void {}
}
static method f<T extends core::Object? = dynamic>() → self::f::T%
  return throw "";
static method test1(self::G g) → void {
  let final self::G #t1 = g in #t1.{self::G::target} = #t1.{self::G::target}{self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
  self::C x = let final self::G #t2 = g in #t2.{self::G::target} = #t2.{self::G::target}{self::A}.{self::A::*}(self::f<self::D>()){(self::D) → self::C};
}
static method test2(self::G g) → void {
  let final self::G #t3 = g in #t3.{self::G::target} = #t3.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
  self::C x = let final self::G #t4 = g in #t4.{self::G::target} = #t4.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
}
static method test3(self::G g) → void {
  let final self::G #t5 = g in #t5.{self::G::target} = #t5.{self::G::target}{self::A}.{self::A::+}(1){(core::int) → self::C};
  self::A x = let final self::G #t6 = g in let final self::A #t7 = #t6.{self::G::target}{self::A} in let final self::C #t8 = #t6.{self::G::target} = #t7.{self::A::+}(1){(core::int) → self::C} in #t7;
}
static method main() → dynamic {}
