library;
//
// Problems in library:
//
// pkg/front_end/testcases/duplicated_bad_prefix.dart:10:7: Error: 'Dupe' is already declared in this scope.
// class Dupe {}
//       ^^^^
// pkg/front_end/testcases/duplicated_bad_prefix.dart:8:7: Context: Previous declaration of 'Dupe'.
// class Dupe {}
//       ^^^^
//
// pkg/front_end/testcases/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
//   Dupe.a b;
//   ^^^^^^
//
// pkg/front_end/testcases/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/duplicated_bad_prefix_lib2.dart'.
// import 'duplicated_bad_prefix_lib2.dart' as dupe;
//                                             ^
//
// pkg/front_end/testcases/duplicated_bad_prefix.dart:13:3: Error: 'Dupe.a' isn't a type.
//   Dupe.a b;
//   ^^^^^^
//
import self as self;
import "dart:core" as core;

import "org-dartlang-testcase:///duplicated_bad_prefix_lib1.dart" as dupe;
import "org-dartlang-testcase:///duplicated_bad_prefix_lib2.dart" as dupe;

class Dupe#1 extends core::Object {
  synthetic constructor •() → self::Dupe#1
    : super core::Object::•()
    ;
}
class Dupe extends core::Object {
  synthetic constructor •() → self::Dupe
    : super core::Object::•()
    ;
}
class C extends core::Object {
  field invalid-type b = null;
  field invalid-type d = null;
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
}
static method main() → dynamic {}

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

class C extends core::Object {
  synthetic constructor •() → self2::C
    : super core::Object::•()
    ;
}

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

class C extends core::Object {
  synthetic constructor •() → self3::C
    : super core::Object::•()
    ;
}
