library /*isNonNullableByDefault*/;
import self as self;
import "error_location_02_lib1.dart" as err;
import "dart:core" as core;

import "org-dartlang-testcase:///error_location_02_lib1.dart";
import "org-dartlang-testcase:///error_location_02_lib2.dart";
import "org-dartlang-testcase:///error_location_02_lib3.dart";

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

library /*isNonNullableByDefault*/;
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){(core::num) → core::bool}), super core::Object::•()
    ;
}
static method foo() → dynamic {
  new err::Foo::•(0);
}

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/error_locations/error_location_02_lib2.dart:7:24: Error: Constant evaluation error:
// const fooField = const Foo(0);
//                        ^
// pkg/front_end/testcases/general/error_locations/error_location_02_lib1.dart:6:31: Context: This assertion failed.
//   const Foo(int i) : assert(i > 0);
//                               ^
// pkg/front_end/testcases/general/error_locations/error_location_02_lib2.dart:7:7: Context: While analyzing:
// const fooField = const Foo(0);
//       ^
//
import self as self2;
import "error_location_02_lib1.dart" as err;

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

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

library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/error_locations/error_location_02_lib3.dart:7:19: Error: Constant evaluation error:
// const fooField2 = fooField;
//                   ^
// pkg/front_end/testcases/general/error_locations/error_location_02_lib1.dart:6:31: Context: This assertion failed.
//   const Foo(int i) : assert(i > 0);
//                               ^
// pkg/front_end/testcases/general/error_locations/error_location_02_lib3.dart:7:7: Context: While analyzing:
// const fooField2 = fooField;
//       ^
//
import self as self3;
import "error_location_02_lib1.dart" as err;

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

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



Constructor coverage from constants:
org-dartlang-testcase:///error_location_02_lib2.dart:
- Foo. (from org-dartlang-testcase:///error_location_02_lib1.dart:6:9)
