// 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 compile error occurs.
/// If T or any of its superclasses is malbounded a compile 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


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

class D extends C {
}

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