library;
//
// Problems in library:
//
// pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
//   var x = new ExistingClass.nonExistingConstructor();
//                             ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Method not found: 'ExistingClass'.
//   x = new ExistingClass();
//           ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Method not found: 'ExistingClass'.
//   x = new ExistingClass<String>();
//           ^^^^^^^^^^^^^
//
// pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
//   x = new ExistingClass<String>.nonExistingConstructor();
//                                 ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
//   x = new ExistingClass<String, String>.nonExistingConstructor();
//                                         ^^^^^^^^^^^^^^^^^^^^^^
//
// pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Method not found: 'NonExistingClass'.
//   x = new NonExistingClass();
//           ^^^^^^^^^^^^^^^^
//
import self as self;
import "dart:core" as core;

class ExistingClass extends core::Object {
  constructor existingConstructor() → self::ExistingClass*
    : super core::Object::•()
    ;
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic {
  dynamic x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:10:29: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
  var x = new ExistingClass.nonExistingConstructor();
                            ^^^^^^^^^^^^^^^^^^^^^^";
  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:11:11: Error: Method not found: 'ExistingClass'.
  x = new ExistingClass();
          ^^^^^^^^^^^^^";
  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:12:11: Error: Method not found: 'ExistingClass'.
  x = new ExistingClass<String>();
          ^^^^^^^^^^^^^";
  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:13:33: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
  x = new ExistingClass<String>.nonExistingConstructor();
                                ^^^^^^^^^^^^^^^^^^^^^^";
  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:14:41: Error: Method not found: 'ExistingClass.nonExistingConstructor'.
  x = new ExistingClass<String, String>.nonExistingConstructor();
                                        ^^^^^^^^^^^^^^^^^^^^^^";
  x = invalid-expression "pkg/front_end/testcases/regress/issue_33452.dart:15:11: Error: Method not found: 'NonExistingClass'.
  x = new NonExistingClass();
          ^^^^^^^^^^^^^^^^";
}
