// Formatted problems:
//
// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
//   static set C(v) {} //# 01: compile-time error
//              ^
//
// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
//   set D(v) {} //# 02: compile-time error
//       ^
//
// pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class '#lib1::C'.
// Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
//   c.C = 5;
//     ^

// Unhandled errors:
//
// pkg/front_end/testcases/regress/issue_34225.dart:6:14: Error: A class member can't have the same name as the enclosing class.
//   static set C(v) {} //# 01: compile-time error
//              ^
//
// pkg/front_end/testcases/regress/issue_34225.dart:10:7: Error: A class member can't have the same name as the enclosing class.
//   set D(v) {} //# 02: compile-time error
//       ^

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

class C extends core::Object {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  static set C(dynamic v) → void {}
}
class D extends core::Object {
  synthetic constructor •() → self::D
    : super core::Object::•()
    ;
  set D(dynamic v) → void {}
}
static method main() → dynamic {
  self::C c = new self::C::•();
  let final dynamic #t1 = c in invalid-expression "pkg/front_end/testcases/regress/issue_34225.dart:15:5: Error: The setter 'C' isn't defined for the class '#lib1::C'.
Try correcting the name to the name of an existing setter, or defining a setter or field named 'C'.
  c.C = 5;
    ^";
  self::D d = new self::D::•();
  d.{self::D::D} = 5;
}
