//
// Problems outside component:
//
// pkg/front_end/testcases/general/error_export_from_dill/main_lib1.dart: Error: 'Duplicate' is exported from both 'pkg/front_end/testcases/general/error_export_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/error_export_from_dill/main_lib3.dart'.
//
library /*isNonNullableByDefault*/;
import self as self;

import "org-dartlang-testcase:///main_lib1.dart" as exported;
import "dart:core" as imported;
import "org-dartlang-testcase:///main_lib2.dart" as imported;
import "org-dartlang-testcase:///main_lib3.dart" as imported;

static method testImported() → dynamic
  ;
static method testExported() → dynamic
  ;

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/error_export_from_dill/main_lib1.dart:7:1: Error: 'Duplicate' is exported from both 'pkg/front_end/testcases/general/error_export_from_dill/main_lib2.dart' and 'pkg/front_end/testcases/general/error_export_from_dill/main_lib3.dart'.
// export 'main_lib3.dart';
// ^
//
import self as self2;
import "dart:core" as core;
import "dart:async" as asy;
additionalExports = (core::Deprecated,
  core::Provisional,
  core::pragma,
  core::BigInt,
  core::bool,
  core::Comparable,
  core::DateTime,
  core::double,
  core::Duration,
  core::Enum,
  core::Error,
  core::AssertionError,
  core::TypeError,
  core::CastError,
  core::NullThrownError,
  core::ArgumentError,
  core::RangeError,
  core::IndexError,
  core::FallThroughError,
  core::AbstractClassInstantiationError,
  core::NoSuchMethodError,
  core::UnsupportedError,
  core::UnimplementedError,
  core::StateError,
  core::ConcurrentModificationError,
  core::OutOfMemoryError,
  core::StackOverflowError,
  core::CyclicInitializationError,
  core::Exception,
  core::FormatException,
  core::IntegerDivisionByZeroException,
  core::Function,
  core::int,
  core::Invocation,
  core::Iterable,
  core::BidirectionalIterator,
  core::Iterator,
  core::List,
  core::Map,
  core::MapEntry,
  core::Null,
  core::num,
  core::Object,
  core::Pattern,
  core::Match,
  core::RegExp,
  core::RegExpMatch,
  core::Set,
  core::Sink,
  core::StackTrace,
  core::Stopwatch,
  core::String,
  core::Runes,
  core::RuneIterator,
  core::StringBuffer,
  core::StringSink,
  core::Symbol,
  core::Type,
  core::Uri,
  core::UriData,
  core::Expando,
  core::WeakReference,
  core::Finalizer,
  core::EnumName,
  core::EnumByName,
  core::identical,
  core::identityHashCode,
  core::print,
  core::Comparator,
  core::deprecated,
  core::override,
  core::provisional,
  core::proxy,
  asy::Future,
  asy::Stream,
  asy::FutureExtensions)

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

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

library /*isNonNullableByDefault*/;
import self as self3;
import "dart:core" as core;

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

library /*isNonNullableByDefault*/;
import self as self4;
import "dart:core" as core;

class Duplicate extends core::Object {
  synthetic constructor •() → self4::Duplicate
    ;
}

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