/*
 * 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 If e is of the form
 * const T.id(a1, ..., an, xn+1: an+1, ..., xn+k: an+k) it is a compile-time
 * error if T.id is not the name of a constant constructor declared by the
 * type T.
 * @description Checks that it is a compile-time error if T.id
 * is the name of a non-constant constructor declared by the type T.
 * @compile-error
 * @author msyabro
 */

class  A {
  A.nonConstCtor() {}
}

main() {
  const A.nonConstCtor();
}
