diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 649b7df..896fd20 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -3819,6 +3819,8 @@
         Message Function(String name)>(
     messageTemplate:
         r"""Field '#name' is a dart:ffi Pointer to a struct field and therefore cannot be initialized before constructor execution.""",
+    tipTemplate:
+        r"""Mark the field as external to avoid having to initialize it.""",
     withArguments: _withArgumentsFfiFieldInitializer);
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -3834,6 +3836,7 @@
   return new Message(codeFfiFieldInitializer,
       message:
           """Field '${name}' is a dart:ffi Pointer to a struct field and therefore cannot be initialized before constructor execution.""",
+      tip: """Mark the field as external to avoid having to initialize it.""",
       arguments: {'name': name});
 }
 
diff --git a/pkg/analyzer/lib/src/dart/error/ffi_code.dart b/pkg/analyzer/lib/src/dart/error/ffi_code.dart
index cacf7bc..41fa904 100644
--- a/pkg/analyzer/lib/src/dart/error/ffi_code.dart
+++ b/pkg/analyzer/lib/src/dart/error/ffi_code.dart
@@ -46,7 +46,8 @@
   static const FfiCode FIELD_IN_STRUCT_WITH_INITIALIZER = FfiCode(
       name: 'FIELD_IN_STRUCT_WITH_INITIALIZER',
       message: "Fields in subclasses of 'Struct' can't have initializers.",
-      correction: "Try removing the initializer.");
+      correction:
+          "Try removing the initializer and marking the field as external.");
 
   /**
    * No parameters.
@@ -55,7 +56,8 @@
       name: 'FIELD_INITIALIZER_IN_STRUCT',
       message: "Constructors in subclasses of 'Struct' can't have field "
           "initializers.",
-      correction: "Try removing the field initializer.");
+      correction: "Try removing the field initializer and marking the field as"
+          " external.");
 
   /**
    * Parameters:
diff --git a/pkg/analyzer/lib/src/workspace/gn.dart b/pkg/analyzer/lib/src/workspace/gn.dart
index fe78cc0..3ceaea6 100644
--- a/pkg/analyzer/lib/src/workspace/gn.dart
+++ b/pkg/analyzer/lib/src/workspace/gn.dart
@@ -143,10 +143,15 @@
   /// For a source at `$root/foo/bar`, the packages files are generated in
   /// `$root/out/<debug|release>-XYZ/dartlang/gen/foo/bar`.
   ///
-  /// Note that in some cases multiple .packages files can be found at that
-  /// location, for example if the package contains both a library and a binary
-  /// target. For a complete view of the package, all of these files need to be
-  /// taken into account.
+  /// Note that in some cases multiple package_config.json files can be found at
+  /// that location, for example if the package contains both a library and a
+  /// binary target. For a complete view of the package, all of these files need
+  /// to be taken into account.
+  ///
+  /// Additionally, often times the package_config file name is prepended by
+  /// extra words, which results in file names like
+  /// `tiler_component_package_config.json`. Because of this, we cannot simply
+  /// check for `pathContext.basename(file.path) == 'package_config.json'`.
   static List<File> _findPackagesFile(
     ResourceProvider provider,
     String root,
@@ -166,7 +171,7 @@
     return genDir
         .getChildren()
         .whereType<File>()
-        .where((File file) => pathContext.extension(file.path) == '.packages')
+        .where((File file) => file.path.endsWith('package_config.json'))
         .toList();
   }
 
diff --git a/pkg/analyzer/test/src/context/builder_test.dart b/pkg/analyzer/test/src/context/builder_test.dart
index 7872242..588e22f 100644
--- a/pkg/analyzer/test/src/context/builder_test.dart
+++ b/pkg/analyzer/test/src/context/builder_test.dart
@@ -436,7 +436,11 @@
   void test_createWorkspace_noPackagesFile_hasGnMarkerFiles() {
     newFolder('/workspace/.jiri_root');
     newFile(
-        '/workspace/out/debug-x87_128/dartlang/gen/project/lib/lib.packages');
+        '/workspace/out/debug-x87_128/dartlang/gen/project/lib/lib_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": []
+}''');
     Workspace workspace = ContextBuilder.createWorkspace(resourceProvider,
         convertPath('/workspace/project/lib/lib.dart'), builder);
     expect(workspace, TypeMatcher<GnWorkspace>());
diff --git a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
index a2d3d19..875eb66 100644
--- a/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/deprecated_member_use_test.dart
@@ -398,14 +398,23 @@
   }
 
   void _writeWorkspacePackagesFile(Map<String, String> nameToLibPath) {
-    var builder = StringBuffer();
-    for (var entry in nameToLibPath.entries) {
-      builder.writeln('${entry.key}:${toUriStr(entry.value)}');
-    }
+    var packages = nameToLibPath.entries.map((entry) => '''{
+    "languageVersion": "2.2",
+    "name": "${entry.key}",
+    "packageUri": ".",
+    "rootUri": "${toUriStr(entry.value)}"
+  }''');
 
     var buildDir = 'out/debug-x87_128';
     var genPath = '$workspaceRootPath/$buildDir/dartlang/gen';
-    newFile('$genPath/foo.packages', content: builder.toString());
+    newFile('$genPath/foo_package_config.json', content: '''{
+  "configVersion": 2,
+  "packages": [ ${packages.join(', ')} ]
+}''');
+    print('''{
+  "configVersion": 2,
+  "packages": [ ${packages.join(', ')} ]
+}''');
   }
 }
 
diff --git a/pkg/analyzer/test/src/workspace/gn_test.dart b/pkg/analyzer/test/src/workspace/gn_test.dart
index 92244fb..9c06fd4 100644
--- a/pkg/analyzer/test/src/workspace/gn_test.dart
+++ b/pkg/analyzer/test/src/workspace/gn_test.dart
@@ -106,10 +106,25 @@
     newFolder('/ws/.jiri_root');
     String buildDir = convertPath('out/debug-x87_128');
     newFile('/ws/.fx-build-dir', content: '$buildDir\n');
-    newFile('/ws/out/debug-x87_128/dartlang/gen/some/code/foo.packages',
-        content: '''
-p1:file:///some/path/lib/
-workspace:lib/''');
+    newFile(
+        '/ws/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": [
+    {
+      "languageVersion": "2.2",
+      "name": "p1",
+      "packageUri": "lib",
+      "rootUri": "some/path/"
+    },
+    {
+      "languageVersion": "2.2",
+      "name": "workspace",
+      "packageUri": "lib",
+      "rootUri": ""
+    }
+  ]
+}''');
     newFolder('/ws/some/code');
     var gnWorkspace =
         GnWorkspace.find(resourceProvider, convertPath('/ws/some/code'));
@@ -147,7 +162,8 @@
     newFile('/workspace/some/code/pubspec.yaml');
     String buildDir = convertPath('out/debug-x87_128');
     newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
-    newFile('/workspace/out/debug-x87_128/dartlang/gen/some/code/foo.packages');
+    newFile(
+        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json');
     GnWorkspace workspace =
         GnWorkspace.find(resourceProvider, convertPath('/workspace/some/code'));
     expect(workspace, isNotNull);
@@ -162,14 +178,25 @@
     newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile('/workspace/out/debug-x87_128/dartlang/gen/some/code/foo.packages',
-        content: 'flutter:$packageUri');
+    newFile(
+        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": [
+    {
+      "languageVersion": "2.2",
+      "name": "flutter",
+      "packageUri": "lib",
+      "rootUri": "$packageUri"
+    }
+  ]
+}''');
     GnWorkspace workspace =
         GnWorkspace.find(resourceProvider, convertPath('/workspace/some/code'));
     expect(workspace, isNotNull);
     expect(workspace.root, convertPath('/workspace'));
     expect(workspace.packageMap.length, 1);
-    expect(workspace.packageMap['flutter'][0].path, packageLocation);
+    expect(workspace.packageMap['flutter'][0].path, "$packageLocation/lib");
   }
 
   void test_packages_absoluteBuildDir() {
@@ -180,14 +207,25 @@
     newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile('/workspace/out/debug-x87_128/dartlang/gen/some/code/foo.packages',
-        content: 'flutter:$packageUri');
+    newFile(
+        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": [
+    {
+      "languageVersion": "2.2",
+      "name": "flutter",
+      "packageUri": "lib",
+      "rootUri": "$packageUri"
+    }
+  ]
+}''');
     GnWorkspace workspace =
         GnWorkspace.find(resourceProvider, convertPath('/workspace/some/code'));
     expect(workspace, isNotNull);
     expect(workspace.root, convertPath('/workspace'));
     expect(workspace.packageMap.length, 1);
-    expect(workspace.packageMap['flutter'][0].path, packageLocation);
+    expect(workspace.packageMap['flutter'][0].path, "$packageLocation/lib");
   }
 
   void test_packages_fallbackBuildDir() {
@@ -196,14 +234,25 @@
     newFile('/workspace/some/code/pubspec.yaml');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile('/workspace/out/debug-x87_128/dartlang/gen/some/code/foo.packages',
-        content: 'flutter:$packageUri');
+    newFile(
+        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": [
+    {
+      "languageVersion": "2.2",
+      "name": "flutter",
+      "packageUri": "lib",
+      "rootUri": "$packageUri"
+    }
+  ]
+}''');
     GnWorkspace workspace =
         GnWorkspace.find(resourceProvider, convertPath('/workspace/some/code'));
     expect(workspace, isNotNull);
     expect(workspace.root, convertPath('/workspace'));
     expect(workspace.packageMap.length, 1);
-    expect(workspace.packageMap['flutter'][0].path, packageLocation);
+    expect(workspace.packageMap['flutter'][0].path, "$packageLocation/lib");
   }
 
   void test_packages_fallbackBuildDirWithUselessConfig() {
@@ -213,14 +262,25 @@
     newFile('/workspace/.fx-build-dir', content: '');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile('/workspace/out/debug-x87_128/dartlang/gen/some/code/foo.packages',
-        content: 'flutter:$packageUri');
+    newFile(
+        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": [
+    {
+      "languageVersion": "2.2",
+      "name": "flutter",
+      "packageUri": "lib",
+      "rootUri": "$packageUri"
+    }
+  ]
+}''');
     GnWorkspace workspace =
         GnWorkspace.find(resourceProvider, convertPath('/workspace/some/code'));
     expect(workspace, isNotNull);
     expect(workspace.root, convertPath('/workspace'));
     expect(workspace.packageMap.length, 1);
-    expect(workspace.packageMap['flutter'][0].path, packageLocation);
+    expect(workspace.packageMap['flutter'][0].path, "$packageLocation/lib");
   }
 
   void test_packages_multipleCandidates() {
@@ -231,20 +291,42 @@
     newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
     String packageLocation = convertPath('/workspace/this/is/the/package');
     Uri packageUri = resourceProvider.pathContext.toUri(packageLocation);
-    newFile('/workspace/out/debug-x87_128/dartlang/gen/some/code/foo.packages',
-        content: 'flutter:$packageUri');
+    newFile(
+        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": [
+    {
+      "languageVersion": "2.2",
+      "name": "flutter",
+      "packageUri": "lib1",
+      "rootUri": "$packageUri"
+    }
+  ]
+}''');
     String otherPackageLocation = convertPath('/workspace/here/too');
     Uri otherPackageUri =
         resourceProvider.pathContext.toUri(otherPackageLocation);
     newFile(
-        '/workspace/out/release-y22_256/dartlang/gen/some/code/foo.packages',
-        content: 'rettulf:$otherPackageUri');
+        '/workspace/out/release-y22_256/dartlang/gen/some/code/foo_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": [
+    {
+      "languageVersion": "2.2",
+      "name": "rettulf",
+      "packageUri": "lib2",
+      "rootUri": "$otherPackageUri"
+    }
+  ]
+}''');
     GnWorkspace workspace =
         GnWorkspace.find(resourceProvider, convertPath('/workspace/some/code'));
     expect(workspace, isNotNull);
     expect(workspace.root, convertPath('/workspace'));
     expect(workspace.packageMap.length, 1);
-    expect(workspace.packageMap['rettulf'][0].path, otherPackageLocation);
+    expect(
+        workspace.packageMap['rettulf'][0].path, "$otherPackageLocation/lib2");
   }
 
   void test_packages_multipleFiles() {
@@ -255,20 +337,43 @@
     newFile('/workspace/.fx-build-dir', content: '$buildDir\n');
     String packageOneLocation = convertPath('/workspace/this/is/the/package');
     Uri packageOneUri = resourceProvider.pathContext.toUri(packageOneLocation);
-    newFile('/workspace/out/debug-x87_128/dartlang/gen/some/code/foo.packages',
-        content: 'flutter:$packageOneUri');
+    newFile(
+        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": [
+    {
+      "languageVersion": "2.2",
+      "name": "flutter",
+      "packageUri": "one/lib",
+      "rootUri": "$packageOneUri"
+    }
+  ]
+}''');
     String packageTwoLocation =
         convertPath('/workspace/this/is/the/other/package');
     Uri packageTwoUri = resourceProvider.pathContext.toUri(packageTwoLocation);
     newFile(
-        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_test.packages',
-        content: 'rettulf:$packageTwoUri');
+        '/workspace/out/debug-x87_128/dartlang/gen/some/code/foo_test_package_config.json',
+        content: '''{
+  "configVersion": 2,
+  "packages": [
+    {
+      "languageVersion": "2.2",
+      "name": "rettulf",
+      "packageUri": "two/lib",
+      "rootUri": "$packageTwoUri"
+    }
+  ]
+}''');
     GnWorkspace workspace =
         GnWorkspace.find(resourceProvider, convertPath('/workspace/some/code'));
     expect(workspace, isNotNull);
     expect(workspace.root, convertPath('/workspace'));
     expect(workspace.packageMap.length, 2);
-    expect(workspace.packageMap['flutter'][0].path, packageOneLocation);
-    expect(workspace.packageMap['rettulf'][0].path, packageTwoLocation);
+    expect(
+        workspace.packageMap['flutter'][0].path, "$packageOneLocation/one/lib");
+    expect(
+        workspace.packageMap['rettulf'][0].path, "$packageTwoLocation/two/lib");
   }
 }
diff --git a/pkg/dartdev/lib/src/commands/test.dart b/pkg/dartdev/lib/src/commands/test.dart
index b5b7c6a..b010f54 100644
--- a/pkg/dartdev/lib/src/commands/test.dart
+++ b/pkg/dartdev/lib/src/commands/test.dart
@@ -29,18 +29,6 @@
 
   @override
   FutureOr<int> run() async {
-    if (argResults.rest.contains('-h') || argResults.rest.contains('--help')) {
-      printUsage();
-      return 0;
-    }
-    if (!project.hasPubspecFile) {
-      log.stdout('''
-No pubspec.yaml file found; please run this command from the root of your project.
-''');
-
-      printUsage();
-      return 65;
-    }
     try {
       final testExecutable = await getExecutableForCommand('test:test');
       log.trace('dart $testExecutable ${argResults.rest.join(' ')}');
@@ -49,9 +37,19 @@
               join(current, '.dart_tool', 'package_config.json'));
       return 0;
     } on CommandResolutionFailedException catch (e) {
-      print(e.message);
-      print('You need to add a dependency on package:test.');
-      print('Try running `dart pub add test`.');
+      if (project.hasPubspecFile) {
+        print(e.message);
+        print('You need to add a dev_dependency on package:test.');
+        print('Try running `dart pub add --dev test`.');
+      } else {
+        print(
+            'No pubspec.yaml file found - run this command in your project folder.');
+      }
+      if (argResults.rest.contains('-h') ||
+          argResults.rest.contains('--help')) {
+        print('');
+        printUsage();
+      }
       return 65;
     }
   }
diff --git a/pkg/dartdev/test/commands/help_test.dart b/pkg/dartdev/test/commands/help_test.dart
index afbaf09..09c3c41 100644
--- a/pkg/dartdev/test/commands/help_test.dart
+++ b/pkg/dartdev/test/commands/help_test.dart
@@ -20,6 +20,7 @@
   /// Commands not tested by the following loop.
   List<String> _commandsNotTested = <String>[
     'help', // `dart help help` is redundant
+    'test', // `dart help test` does not call `test:test --help`.
   ];
   DartdevRunner(['--no-analytics'])
       .commands
@@ -36,6 +37,16 @@
     }
   });
 
+  test('(help test ~= test --help) outside project', () {
+    p = project();
+    p.deleteFile('pubspec.yaml');
+    var result = p.runSync(['help', 'test']);
+    var testHelpResult = p.runSync(['test', '--help']);
+
+    expect(testHelpResult.stdout, contains(result.stdout));
+    expect(testHelpResult.stderr, contains(result.stderr));
+  });
+
   test('(help pub == pub --help)', () {
     p = project();
     var result = p.runSync(['help', 'pub']);
diff --git a/pkg/dartdev/test/commands/test_test.dart b/pkg/dartdev/test/commands/test_test.dart
index 00be2bc..cc8b5d0 100644
--- a/pkg/dartdev/test/commands/test_test.dart
+++ b/pkg/dartdev/test/commands/test_test.dart
@@ -24,7 +24,11 @@
     final result = p.runSync(['test', '--help']);
 
     expect(result.exitCode, 0);
-    expect(result.stdout, contains(' tests in this package'));
+    expect(result.stdout, startsWith('''
+Runs tests in this package.
+
+Usage: pub run test [files or directories...]
+'''));
     expect(result.stderr, isEmpty);
   });
 
@@ -46,8 +50,25 @@
     var result = p.runSync(['test']);
 
     expect(result.stderr, isEmpty);
-    expect(result.stdout, contains('No pubspec.yaml file found'));
+    expect(result.stdout, '''
+No pubspec.yaml file found - run this command in your project folder.
+''');
     expect(result.exitCode, 65);
+
+    var resultHelp = p.runSync(['test', '--help']);
+
+    expect(resultHelp.stderr, isEmpty);
+    expect(resultHelp.stdout, '''
+No pubspec.yaml file found - run this command in your project folder.
+
+Run tests in this package.
+
+Usage: dart test [arguments]
+
+
+Run "dart help" to see global options.
+''');
+    expect(resultHelp.exitCode, 65);
   });
 
   test('runs test', () {
@@ -90,7 +111,7 @@
     expect(result.exitCode, 65);
     expect(
       result.stdout,
-      contains('You need to add a dependency on package:test'),
+      contains('You need to add a dev_dependency on package:test'),
     );
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 65);
diff --git a/pkg/dartdev/test/utils.dart b/pkg/dartdev/test/utils.dart
index 48dcfd7..0ef90d3 100644
--- a/pkg/dartdev/test/utils.dart
+++ b/pkg/dartdev/test/utils.dart
@@ -68,6 +68,12 @@
     file.writeAsStringSync(contents);
   }
 
+  void deleteFile(String name) {
+    var file = File(path.join(dir.path, name));
+    assert(file.existsSync());
+    file.deleteSync();
+  }
+
   void dispose() {
     if (dir.existsSync()) {
       dir.deleteSync(recursive: true);
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 9c849fb..83af639 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -4268,6 +4268,7 @@
 FfiFieldInitializer:
   # Used by dart:ffi
   template: "Field '#name' is a dart:ffi Pointer to a struct field and therefore cannot be initialized before constructor execution."
+  tip: "Mark the field as external to avoid having to initialize it."
   external: test/ffi_test.dart
 
 FfiExtendsOrImplementsSealedClass:
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index 2459797..543ad37 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -329,11 +329,14 @@
   }
 }
 
-static const InstructionSource kPrologueSource(TokenPosition::kDartCodePrologue,
-                                               /*inlining_id=*/0);
+const InstructionSource& PrologueSource() {
+  static InstructionSource prologue_source(TokenPosition::kDartCodePrologue,
+                                           /*inlining_id=*/0);
+  return prologue_source;
+}
 
 void FlowGraphCompiler::EmitPrologue() {
-  BeginCodeSourceRange(kPrologueSource);
+  BeginCodeSourceRange(PrologueSource());
 
   EmitFrameEntry();
   ASSERT(assembler()->constant_pool_allowed());
@@ -360,7 +363,7 @@
     }
   }
 
-  EndCodeSourceRange(kPrologueSource);
+  EndCodeSourceRange(PrologueSource());
 }
 
 // Input parameters:
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index 2ccf7b4..88f8e0b 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -321,11 +321,14 @@
   }
 }
 
-static const InstructionSource kPrologueSource(TokenPosition::kDartCodePrologue,
-                                               /*inlining_id=*/0);
+const InstructionSource& PrologueSource() {
+  static InstructionSource prologue_source(TokenPosition::kDartCodePrologue,
+                                           /*inlining_id=*/0);
+  return prologue_source;
+}
 
 void FlowGraphCompiler::EmitPrologue() {
-  BeginCodeSourceRange(kPrologueSource);
+  BeginCodeSourceRange(PrologueSource());
 
   EmitFrameEntry();
   ASSERT(assembler()->constant_pool_allowed());
@@ -352,7 +355,7 @@
     }
   }
 
-  EndCodeSourceRange(kPrologueSource);
+  EndCodeSourceRange(PrologueSource());
 }
 
 // Input parameters:
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index ecc4cae..1f9624b 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -475,11 +475,14 @@
   }
 }
 
-static const InstructionSource kPrologueSource(TokenPosition::kDartCodePrologue,
-                                               /*inlining_id=*/0);
+const InstructionSource& PrologueSource() {
+  static InstructionSource prologue_source(TokenPosition::kDartCodePrologue,
+                                           /*inlining_id=*/0);
+  return prologue_source;
+}
 
 void FlowGraphCompiler::EmitPrologue() {
-  BeginCodeSourceRange(kPrologueSource);
+  BeginCodeSourceRange(PrologueSource());
 
   EmitFrameEntry();
 
@@ -507,7 +510,7 @@
     }
   }
 
-  EndCodeSourceRange(kPrologueSource);
+  EndCodeSourceRange(PrologueSource());
 }
 
 void FlowGraphCompiler::CompileGraph() {
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 2f8db78..5cd4559 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -330,11 +330,14 @@
   }
 }
 
-static const InstructionSource kPrologueSource(TokenPosition::kDartCodePrologue,
-                                               /*inlining_id=*/0);
+const InstructionSource& PrologueSource() {
+  static InstructionSource prologue_source(TokenPosition::kDartCodePrologue,
+                                           /*inlining_id=*/0);
+  return prologue_source;
+}
 
 void FlowGraphCompiler::EmitPrologue() {
-  BeginCodeSourceRange(kPrologueSource);
+  BeginCodeSourceRange(PrologueSource());
 
   EmitFrameEntry();
   ASSERT(assembler()->constant_pool_allowed());
@@ -361,7 +364,7 @@
     }
   }
 
-  EndCodeSourceRange(kPrologueSource);
+  EndCodeSourceRange(PrologueSource());
 }
 
 void FlowGraphCompiler::CompileGraph() {
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index c19ce36..ce5084a 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -172,7 +172,7 @@
    * length 4.
    * If the [type] is [InternetAddressType.IPv6], the [rawAddress] must have
    * length 16.
-   * If the [type] is [InternetAddressType.IPv4], the [rawAddress] must be a
+   * If the [type] is [InternetAddressType.unix], the [rawAddress] must be a
    * valid UTF-8 encoded file path.
    *
    * If [type] is omitted, the [rawAddress] must have a length of either 4 or
@@ -433,7 +433,7 @@
 
 /**
  * The [SocketOption] is used as a parameter to [Socket.setOption] and
- * [RawSocket.setOption] to set customize the behaviour of the underlying
+ * [RawSocket.setOption] to customize the behaviour of the underlying
  * socket.
  */
 class SocketOption {
@@ -470,7 +470,7 @@
 }
 
 /// The [RawSocketOption] is used as a parameter to [Socket.setRawOption] and
-/// [RawSocket.setRawOption] to set customize the behaviour of the underlying
+/// [RawSocket.setRawOption] to customize the behaviour of the underlying
 /// socket.
 ///
 /// It allows for fine grained control of the socket options, and its values
diff --git a/tools/VERSION b/tools/VERSION
index 6ed6580..3971c49 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 190
+PRERELEASE 191
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g
index a200f70..e13e789 100644
--- a/tools/spec_parser/Dart.g
+++ b/tools/spec_parser/Dart.g
@@ -4,6 +4,37 @@
 
 // CHANGES:
 //
+// v0.12 (82403371ac00ddf004be60fa7b705474d2864509) Cf. language issue #1341:
+// correct `metadata`. Change `qualifiedName` such that it only includes the
+// cases with a '.'; the remaining case is added where `qualifiedName` is used.
+//
+// v0.11 (67c703063d5b68c9e132edbaf34dfe375851f5a6) Corrections, mainly:
+// `fieldFormalParameter` now allows `?` on the parameter type; cascade was
+// reorganized in the spec, it is now reorganized similarly here; `?` was
+// removed from argumentPart (null-aware invocation was never added).
+//
+// v0.10 (8ccdb9ae796d543e4ad8f339c847c02b09018d2d) Simplify grammar by making
+// `constructorInvocation` an alternative in `primary`.
+//
+// v0.9 (f4d7951a88e1b738e22b768c3bc72bf1a1062365) Introduce abstract and
+// external variables.
+//
+// v0.8 (a9ea9365ad8a3e3b59115bd889a55b6aa2c5a5fa) Change null-aware
+// invocations of `operator []` and `operator []=` to not have a period.
+//
+// v0.7 (6826faf583f6a543b1a0e2e85bd6a8042607ce00) Introduce extension and
+// mixin declarations. Revise rules about string literals and string
+// interpolation. Reorganize "keywords" (built-in identifiers, reserved words,
+// other words that are specified in the grammar and not parsed as IDENTIFIER)
+// into explicitly marked groups. Change the cascade syntax to be
+// compositional.
+//
+// v0.6 (a58052974ec2b4b334922c5227b043ed2b9c2cc5) Introduce syntax associated
+// with null safety.
+//
+// v0.5 (56793b3d4714d4818d855a72074d5295489aef3f) Stop treating `ASYNC` as a
+// conditional reserved word (only `AWAIT` and `YIELD` get this treatment).
+//
 // v0.4 Added support for 'unified collections' (spreads and control flow
 // in collection literals).
 //
