Version 2.7.0-dev.2.1

* Cherry-pick 3f32196958970682b1acba6abb73bb891e23709e to dev
* Cherry-pick f9cedb68137655fddaa7f345578fbe97729f5012 to dev
* Cherry-pick 8023accf3f16740e91bd53c5402aafbc4d209352 to dev
* Cherry-pick 1392d61c9be32f247bd7bd3180e0858cbaca3d7e to dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index eb17626..367fbca 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,43 +1,4 @@
-## Next release
-(Add new changes here, and they will be copied to the change section for the
- next release)
-
-### Core libraries
-
-#### `dart:io`
-
-* **Breaking change**: Added `IOOverrides.serverSocketBind` to aid in writing
-  tests that wish to mock `ServerSocket.bind`.
-
-### Dart VM
-
-* New fields added to existing instances by a reload will now be initialized
-lazily, as if the field was a late field. This makes the initialization order
-program-defined, whereas previously it was undefined.
-
-### Tools
-
-#### Linter
-
-The Linter was updated to `0.1.103`, which includes:
-
-* updates to `prefer_relative_imports` to use a faster and more robust way to check for self-package references
-* updates to our approach to checking for `lib` dir contents (speeding up `avoid_renaming_method_parameters` and
-  making `prefer_relative_imports` and `public_member_api_docs` amenable to internal package formats -- w/o pubspecs)
-
-#### Pub
-
-* `pub get` generates [`.dart_tools/package_config.json`](https://github.com/dart-lang/language/blob/62c036cc41b10fb543102d2f73ee132d1e2b2a0e/accepted/future-releases/language-versioning/package-config-file-v2.md)
-  in addition to `.packages` to support language versioning.
-
-* `pub publish` now warns about the old flutter plugin registration format.
-
-* `pub publish` now warns about the `author` field in pubspec.yaml being.
-  obsolete.
-
-* Show a proper error message when `git` is not installed.
-
-## 2.6.0 - 2019-11-05
+## 2.7.0 - 2019-12-11
 
 ### Language
 
@@ -2447,7 +2408,7 @@
 
 * `dart:web_audio`
 
-  * new method on `AudioContext` – `createIirFilter` returns a new class
+  * new method on `AudioContext` – `createIirFilter` returns a new class
     `IirFilterNode`.
 
 * `dart:web_gl`
diff --git a/pkg/front_end/testcases/general/ffi_sample.dart.strong.transformed.expect b/pkg/front_end/testcases/general/ffi_sample.dart.strong.transformed.expect
index 2b10843..0b6ab81 100644
--- a/pkg/front_end/testcases/general/ffi_sample.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/ffi_sample.dart.strong.transformed.expect
@@ -10,7 +10,7 @@
 @#C3
 class Coordinate extends ffi::Struct {
   @#C3
-  static final field core::int* #sizeOf = (#C6).{core::List::[]}(ffi::_abi())/* from null */;
+  static final field core::int* #sizeOf = (#C6).{core::List::[]}(ffi::_abi());
   @#C3
   constructor #fromPointer(dynamic #pointer) → dynamic
     : super ffi::Struct::_fromPointer(#pointer)
diff --git a/pkg/vm/lib/transformations/ffi_definitions.dart b/pkg/vm/lib/transformations/ffi_definitions.dart
index 9861852..e7da53d 100644
--- a/pkg/vm/lib/transformations/ffi_definitions.dart
+++ b/pkg/vm/lib/transformations/ffi_definitions.dart
@@ -217,7 +217,9 @@
         name: Name("#fromPointer"),
         initializers: [
           SuperInitializer(structFromPointer, Arguments([VariableGet(pointer)]))
-        ]);
+        ],
+        fileUri: node.fileUri)
+      ..fileOffset = node.fileOffset;
     _makeEntryPoint(ctor);
     node.addMember(ctor);
   }
@@ -378,7 +380,9 @@
         isStatic: true,
         isFinal: true,
         initializer: _runtimeBranchOnLayout(sizes),
-        type: InterfaceType(intClass, Nullability.legacy));
+        type: InterfaceType(intClass, Nullability.legacy),
+        fileUri: struct.fileUri)
+      ..fileOffset = struct.fileOffset;
     _makeEntryPoint(sizeOf);
     struct.addMember(sizeOf);
   }
diff --git a/pkg/vm/lib/transformations/ffi_use_sites.dart b/pkg/vm/lib/transformations/ffi_use_sites.dart
index 9e3ba3ed..5568750 100644
--- a/pkg/vm/lib/transformations/ffi_use_sites.dart
+++ b/pkg/vm/lib/transformations/ffi_use_sites.dart
@@ -297,7 +297,9 @@
               nativeFunctionType
             ])),
         isStatic: true,
-        isFinal: true);
+        isFinal: true,
+        fileUri: currentLibrary.fileUri)
+      ..fileOffset = node.fileOffset;
     currentLibrary.addMember(field);
     return StaticGet(field);
   }
diff --git a/runtime/vm/dwarf.cc b/runtime/vm/dwarf.cc
index cd5530d..2093b90 100644
--- a/runtime/vm/dwarf.cc
+++ b/runtime/vm/dwarf.cc
@@ -634,6 +634,7 @@
   for (intptr_t i = 0; i < scripts_.length(); i++) {
     const Script& script = *(scripts_[i]);
     uri = script.url();
+    RELEASE_ASSERT(strlen(uri.ToCString()) != 0);
     string(uri.ToCString());  // NOLINT
     uleb128(0);  // Include directory index.
     uleb128(0);  // File modification time.
diff --git a/sdk/lib/core/errors.dart b/sdk/lib/core/errors.dart
index a1b410c..23b2a9a 100644
--- a/sdk/lib/core/errors.dart
+++ b/sdk/lib/core/errors.dart
@@ -590,6 +590,18 @@
 }
 
 /**
- * Error thrown when a late field is set or get when it shouldn't be.
+ * Error thrown when a late variable is accessed in an invalid manner.
+ *
+ * A late variable must be initialized before it's read.
+ * If a late variable has no initializer expression and has not
+ * been written to, then reading it will throw a
+ * late initialization error.
+ *
+ * A late final variable with no initializer expression may only
+ * be written to once.
+ * If it is written to again, the writing will throw a
+ * late initialization error.
  */
-class LateInitializationError extends Error {}
+abstract class LateInitializationError extends Error {
+  factory LateInitializationError._() => throw UnsupportedError("");
+}
diff --git a/sdk_nnbd/lib/core/errors.dart b/sdk_nnbd/lib/core/errors.dart
index 46b852a..58ca190 100644
--- a/sdk_nnbd/lib/core/errors.dart
+++ b/sdk_nnbd/lib/core/errors.dart
@@ -592,6 +592,18 @@
 }
 
 /**
- * Error thrown when a late field is set or get when it shouldn't be.
+ * Error thrown when a late variable is accessed in an invalid manner.
+ *
+ * A late variable must be initialized before it's read.
+ * If a late variable has no initializer expression and has not
+ * been written to, then reading it will throw a
+ * late initialization error.
+ *
+ * A late final variable with no initializer expression may only
+ * be written to once.
+ * If it is written to again, the writing will throw a
+ * late initialization error.
  */
-class LateInitializationError extends Error {}
+abstract class LateInitializationError extends Error {
+  factory LateInitializationError._() => throw UnsupportedError("");
+}
diff --git a/tools/VERSION b/tools/VERSION
index 20a401d..3e2749c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -34,6 +34,6 @@
 MINOR 7
 PATCH 0
 PRERELEASE 2
-PRERELEASE_PATCH 0
+PRERELEASE_PATCH 1
 ABI_VERSION 24
 OLDEST_SUPPORTED_ABI_VERSION 23
diff --git a/tools/make_version.py b/tools/make_version.py
index 70f2900..4b16d91 100755
--- a/tools/make_version.py
+++ b/tools/make_version.py
@@ -47,6 +47,18 @@
 
 def MakeVersionString(quiet, no_git_hash, custom_for_pub=None):
     channel = utils.GetChannel()
+    if custom_for_pub:
+        # TODO(athom): remove the custom 2.7.0 logic post release.
+        # For 2.7.0, we want flutter to claim Dart is 2.7.0 even before it is
+        # decided what exactly 2.7.0 will be. Dart & Flutter stable releases
+        # will be synced, so that what will be released as Dart 2.7.0 will also
+        # be what will be packaged with Flutter.
+        version = utils.ReadVersionFile()
+        custom_version_string = "%s.%s.%s" % (version.major, version.minor,
+                                              version.patch)
+        if custom_version_string == "2.7.0" and custom_for_pub == "flutter":
+            return "2.7.0"
+
     if custom_for_pub and channel == 'be':
         latest = utils.GetLatestDevTag()
         if not latest:
@@ -57,16 +69,6 @@
         else:
             git_hash = utils.GetShortGitHash()
             version_string = ("%s.%s-%s" % (latest, custom_for_pub, git_hash))
-        # TODO(athom): remove the custom 2.7.0 logic post release.
-        # For 2.7.0, we want flutter to claim Dart is 2.7.0 even before it is
-        # decided what exactly 2.7.0 will be. Dart & Flutter stable releases
-        # will be synced, so that what will be released as Dart 2.7.0 will also
-        # be what will be packaged with Flutter.
-        version = utils.ReadVersionFile()
-        custom_version_string = "%s.%s.%s" % (version.major, version.minor, version.patch)
-        if custom_version_string == "2.7.0" and custom_for_pub == "flutter":
-            version_string = "2.7.0"
-
     else:
         version_string = utils.GetSemanticSDKVersion(no_git_hash=no_git_hash)
     if not quiet: