//
// Problems in component:
//
// pkg/front_end/testcases/general/error_locations/error_location_03_lib2.dart:7:24: Error: Constant evaluation error:
// const fooField = const Foo(0);
//                        ^
// pkg/front_end/testcases/general/error_locations/error_location_03_lib1.dart:6:31: Context: This assertion failed.
//   const Foo(int i) : assert(i > 0);
//                               ^
// pkg/front_end/testcases/general/error_locations/error_location_03_lib2.dart:7:7: Context: While analyzing:
// const fooField = const Foo(0);
//       ^
//
// pkg/front_end/testcases/general/error_locations/error_location_03_lib3.dart:7:25: Error: Constant evaluation error:
// const fooField2 = const Foo(0);
//                         ^
// pkg/front_end/testcases/general/error_locations/error_location_03_lib1.dart:6:31: Context: This assertion failed.
//   const Foo(int i) : assert(i > 0);
//                               ^
// pkg/front_end/testcases/general/error_locations/error_location_03_lib3.dart:7:7: Context: While analyzing:
// const fooField2 = const Foo(0);
//       ^
//
library;
import self as self;
import "error_location_03_lib1.dart" as err;
import "dart:core" as core;

import "org-dartlang-testcase:///error_location_03_lib1.dart";
import "org-dartlang-testcase:///error_location_03_lib2.dart";
import "org-dartlang-testcase:///error_location_03_lib3.dart";

static method main() → dynamic {
  err::foo();
  core::print(invalid-expression "This assertion failed.");
  core::print(invalid-expression "This assertion failed.");
}

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

class Foo extends core::Object /*hasConstConstructor*/  {
  const constructor •(core::int* i) → err::Foo*
    : assert(i.{core::num::>}(0)), super core::Object::•()
    ;
}
static method foo() → dynamic {
  new err::Foo::•(0);
}

library;
import self as self2;
import "error_location_03_lib1.dart" as err;

import "org-dartlang-testcase:///error_location_03_lib1.dart";

static const field err::Foo* fooField = invalid-expression "This assertion failed.";

library;
import self as self3;
import "error_location_03_lib1.dart" as err;

import "org-dartlang-testcase:///error_location_03_lib1.dart";

static const field err::Foo* fooField2 = invalid-expression "This assertion failed.";
