// Formatted problems:
//
// pkg/front_end/testcases/constructor_cycle.dart:7:18: Error: Redirecting constructers can't be cyclic.
// Try to have all constructors eventually redirect to a non-redirecting constructor.
//   A.bar() : this.foo();
//                  ^^^
//
// pkg/front_end/testcases/constructor_cycle.dart:9:9: Error: Redirecting constructers can't be cyclic.
// Try to have all constructors eventually redirect to a non-redirecting constructor.
//   A() : this();
//         ^^^^

// Unhandled errors:
//
// pkg/front_end/testcases/constructor_cycle.dart:7:18: Error: Redirecting constructers can't be cyclic.
// Try to have all constructors eventually redirect to a non-redirecting constructor.
//   A.bar() : this.foo();
//                  ^^^
//
// pkg/front_end/testcases/constructor_cycle.dart:9:9: Error: Redirecting constructers can't be cyclic.
// Try to have all constructors eventually redirect to a non-redirecting constructor.
//   A() : this();
//         ^^^^

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

class A extends core::Object {
  constructor foo() → self::A
    : this self::A::bar()
    ;
  constructor bar() → self::A
    : this self::A::foo()
    ;
  constructor baz() → self::A
    : this self::A::foo()
    ;
  constructor •() → self::A
    : this self::A::•()
    ;
}
static method main() → dynamic {}
