//
// Problems outside component:
//
// pkg/front_end/testcases/general/export_builtin_from_dill/main_lib1.dart: Error: 'Never' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.
//
// pkg/front_end/testcases/general/export_builtin_from_dill/main_lib1.dart: Error: 'dynamic' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.
//
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/export_builtin_from_dill/main.dart:11:7: Error: 'Never' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.
//   new exported.Never();
//       ^^^^^^^^
//
// pkg/front_end/testcases/general/export_builtin_from_dill/main.dart:14:7: Error: 'dynamic' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.
//   new exported.dynamic();
//       ^^^^^^^^
//
import self as self;
import "main_lib2.dart" as mai;
import "main_lib3.dart" as mai2;

import "org-dartlang-testcase:///main_lib1.dart" as exported;
import "org-dartlang-testcase:///main_lib2.dart" as lib2;
import "org-dartlang-testcase:///main_lib3.dart" as lib3;
import "org-dartlang-testcase:///main_lib4.dart" as lib4;

static method test() → dynamic {
  invalid-expression "pkg/front_end/testcases/general/export_builtin_from_dill/main.dart:11:7: Error: 'Never' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.
  new exported.Never();
      ^^^^^^^^";
  invalid-type n1;
  <invalid-type>[];
  invalid-expression "pkg/front_end/testcases/general/export_builtin_from_dill/main.dart:14:7: Error: 'dynamic' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.
  new exported.dynamic();
      ^^^^^^^^";
  invalid-type d1;
  <invalid-type>[];
  new mai::Never::•();
  mai::Never n2;
  <mai::Never>[];
  new mai::dynamic::•();
  mai::dynamic d2;
  <mai::dynamic>[];
  new mai2::Never::•();
  mai2::Never n3;
  <mai2::Never>[];
  new mai2::dynamic::•();
  mai2::dynamic d3;
  <mai2::dynamic>[];
  new mai::Never::•();
  mai::Never n4;
  <mai::Never>[];
  new mai::dynamic::•();
  mai::dynamic d4;
  <mai::dynamic>[];
}

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/export_builtin_from_dill/main_lib1.dart:6:1: Error: 'Never' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.
// export 'main_lib3.dart';
// ^
//
// pkg/front_end/testcases/general/export_builtin_from_dill/main_lib1.dart:6:1: Error: 'dynamic' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.
// export 'main_lib3.dart';
// ^
//
import self as self2;
import "dart:core" as core;

export "org-dartlang-testcase:///main_lib2.dart";
export "org-dartlang-testcase:///main_lib3.dart";

static const field dynamic _exports# = #C1 /*isLegacy*/;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart:7:7: Error: Can't use 'dynamic' as a name here.
// class dynamic {}
//       ^^^^^^^
//
import self as mai;
import "dart:core" as core;

class Never extends core::Object {
  synthetic constructor •() → mai::Never
    : super core::Object::•()
    ;
}
class dynamic extends core::Object {
  synthetic constructor •() → mai::dynamic
    : super core::Object::•()
    ;
}

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart:7:7: Error: Can't use 'dynamic' as a name here.
// class dynamic {}
//       ^^^^^^^
//
import self as mai2;
import "dart:core" as core;

class Never extends core::Object {
  synthetic constructor •() → mai2::Never
    : super core::Object::•()
    ;
}
class dynamic extends core::Object {
  synthetic constructor •() → mai2::dynamic
    : super core::Object::•()
    ;
}

library /*isNonNullableByDefault*/;
import self as self3;
import "main_lib2.dart" as mai;
additionalExports = (mai::Never,
  mai::dynamic)

export "org-dartlang-testcase:///main_lib2.dart";


constants  {
  #C1 = "{\"Never\":\"'Never' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.\",\"dynamic\":\"'dynamic' is exported from both 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/export_builtin_from_dill/main_lib3.dart'.\"}"
}
