/*
 * Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 * for details. All rights reserved. Use of this source code is governed by a
 * BSD-style license that can be found in the LICENSE file.
 */
/**
 * @assertion Any self reference in a typedef, either directly, or recursively
 * via another typedef, is a compile time error.
 * @description Checks that self-referencing typedef is not allowed (positional
 * formal parameter type annotation has the same name as the type alias).
 * @compile-error
 * @author iefremov
 */

typedef F(F x);

main() {
  try {
    null is F;
  } catch (x) {}
}
