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:
