// Formatted problems:
//
// pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
//   lib.MyClass get lib => null; // (1)
//   ^^^^^^^^^^^
//
// pkg/front_end/testcases/regress/issue_34498.dart:10:3: Error: 'foo' isn't a type.
//   foo foo() {}
//   ^^^
// pkg/front_end/testcases/regress/issue_34498.dart:10:7: Context: This isn't a type.
//   foo foo() {}
//       ^^^
//
// pkg/front_end/testcases/regress/issue_34498.dart:12:3: Error: Type 'Missing' not found.
//   Missing bar() {}
//   ^^^^^^^
//
// pkg/front_end/testcases/regress/issue_34498.dart:20:3: Error: Can't use type arguments with type variable 'T'.
// Try removing the type arguments.
//   T<String> foo() {}
//   ^

// Unhandled errors:
//
// pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
//   lib.MyClass get lib => null; // (1)
//   ^^^^^^^^^^^
//
// pkg/front_end/testcases/regress/issue_34498.dart:10:3: Error: 'foo' isn't a type.
//   foo foo() {}
//   ^^^
//
// pkg/front_end/testcases/regress/issue_34498.dart:12:3: Error: Type 'Missing' not found.
//   Missing bar() {}
//   ^^^^^^^
//
// pkg/front_end/testcases/regress/issue_34498.dart:20:3: Error: Can't use type arguments with type variable 'T'.
// Try removing the type arguments.
//   T<String> foo() {}
//   ^

library;
import self as self;
import "dart:core" as core;

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  get lib() → invalid-type
    return null;
  method foo() → invalid-type {}
  method bar() → invalid-type {}
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
class C<T extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::C<self::C::T>
    : super core::Object::•()
    ;
  method foo() → invalid-type {}
}
static final field self::A a = null;
static method main() → dynamic {}
