// 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 {}
