/*
 * 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 Evaluation of e proceeds as follows:
 * First, the argument list (a1, ..., an, xn+1: an+1, ..., xn+k: an+k )
 * is evaluated.
 * If T is a deferred type with prefix p, then if p has not been successfully
 * loaded, a dynamic error occurs.
 * Then, if q is a non-factory constructor of an abstract class then an
 * AbstractClassInstantiationError is thrown.
 * If T is malformed or if T is a type variable a dynamic error occurs.
 * In checked mode, if T or any of its superclasses is malbounded a dynamic
 * error occurs. Otherwise, if q is not defined or not accessible, a
 * NoSuchMethodError is thrown. If q has less than n positional parameters or
 * more than n required parameters, or if q lacks any of the keyword parameters
 * {xn+1, ..., xn+k}, a NoSuchMethodError is thrown.
 * @description  Checks that AbstractClassInstantiationError is not thrown if
 * q is a named factory constructor of an abstract class.
 * @author kaigorodov
 * @reviewer rodionov
 */

abstract class C {
  C();
  factory C.c() { return new D();}
}

class D extends C {
}

main() {
  new C.c();
}
