// Formatted problems:
//
// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
//   void foo(int x) {}
//        ^
// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:12:12: Error: This is the inherited member.
//   void set foo(int x);
//            ^

// Unhandled errors:
//
// pkg/front_end/testcases/no_such_method_forwarders/setter_not_shadowed_by_method.dart:10:8: Error: Can't declare a member that conflicts with an inherited one.
//   void foo(int x) {}
//        ^

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

class A extends core::Object {
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method foo(core::int x) → void {}
  no-such-method-forwarder set foo(core::int x) → void
    return this.{self::A::noSuchMethod}(new core::_InvocationMirror::_withoutType("set:foo", const <core::Type>[], core::List::unmodifiable<dynamic>(<dynamic>[x]), core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}), false));
  method noSuchMethod(core::Invocation i) → dynamic
    return null;
}
static method main() → dynamic {}
