diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index b55bf87..f6dab0b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -110,7 +110,7 @@
     documentation:
         'Allow constructor tear-offs and explicit generic instantiations.',
     experimentalReleaseVersion: null,
-    releaseVersion: null,
+    releaseVersion: Version.parse('2.15.0'),
   );
 
   static final control_flow_collections = ExperimentalFeature(
@@ -246,7 +246,7 @@
   static const bool constant_update_2018 = true;
 
   /// Default state of the experiment "constructor-tearoffs"
-  static const bool constructor_tearoffs = false;
+  static const bool constructor_tearoffs = true;
 
   /// Default state of the experiment "control-flow-collections"
   static const bool control_flow_collections = true;
diff --git a/pkg/dartdev/lib/src/analysis_server.dart b/pkg/dartdev/lib/src/analysis_server.dart
index a17a169..0d0ce90 100644
--- a/pkg/dartdev/lib/src/analysis_server.dart
+++ b/pkg/dartdev/lib/src/analysis_server.dart
@@ -24,12 +24,14 @@
 /// A class to provide an API wrapper around an analysis server process.
 class AnalysisServer {
   AnalysisServer(
+    this.packagesFile,
     this.sdkPath,
     this.analysisRoots, {
     @required this.commandName,
     @required this.argResults,
   });
 
+  final File packagesFile;
   final Directory sdkPath;
   final List<FileSystemEntity> analysisRoots;
   final String commandName;
@@ -85,6 +87,7 @@
       '--disable-server-feature-search',
       '--sdk',
       sdkPath.path,
+      if (packagesFile != null) '--packages=${packagesFile.path}',
     ];
 
     _process = await startDartProcess(sdk, command);
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 27fbf53..8664577 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -61,6 +61,13 @@
               'the file path and error message fields.',
         },
         hide: !verbose,
+      )
+      ..addOption(
+        'packages',
+        valueHelp: 'path',
+        help: 'The path to the package resolution configuration file, which '
+            'supplies a mapping of package names\ninto paths.',
+        hide: !verbose,
       );
   }
 
@@ -97,6 +104,7 @@
         machineFormat ? null : log.progress('Analyzing $targetsNames');
 
     final AnalysisServer server = AnalysisServer(
+      _packagesFile(),
       io.Directory(sdk.sdkPath),
       targets,
       commandName: 'analyze',
@@ -179,6 +187,19 @@
     }
   }
 
+  io.File _packagesFile() {
+    var path = argResults['packages'];
+    if (path is String) {
+      var file = io.File(path);
+      if (!file.existsSync()) {
+        usageException("The file doesn't exist: $path");
+      }
+      return file;
+    } else {
+      return null;
+    }
+  }
+
   @visibleForTesting
   static void emitDefaultFormat(
     Logger log,
@@ -303,13 +324,6 @@
     }));
   }
 
-  /// Return a relative path if it is a shorter reference than the given dir.
-  static String _relativePath(String givenPath, io.Directory fromDir) {
-    String fromPath = fromDir?.absolute?.resolveSymbolicLinksSync();
-    String relative = path.relative(givenPath, from: fromPath);
-    return relative.length <= givenPath.length ? relative : givenPath;
-  }
-
   @visibleForTesting
   static void emitMachineFormat(Logger log, List<AnalysisError> errors) {
     for (final AnalysisError error in errors) {
@@ -342,4 +356,11 @@
     }
     return result.toString();
   }
+
+  /// Return a relative path if it is a shorter reference than the given dir.
+  static String _relativePath(String givenPath, io.Directory fromDir) {
+    String fromPath = fromDir?.absolute?.resolveSymbolicLinksSync();
+    String relative = path.relative(givenPath, from: fromPath);
+    return relative.length <= givenPath.length ? relative : givenPath;
+  }
 }
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index b796a20..b19b433 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -90,6 +90,7 @@
         'Computing fixes in ${log.ansi.emphasized(projectName)}$modeText');
 
     var server = AnalysisServer(
+      null,
       io.Directory(sdk.sdkPath),
       [dir],
       commandName: 'fix',
diff --git a/pkg/dartdev/test/analysis_server_test.dart b/pkg/dartdev/test/analysis_server_test.dart
index 05f7597..9902dda 100644
--- a/pkg/dartdev/test/analysis_server_test.dart
+++ b/pkg/dartdev/test/analysis_server_test.dart
@@ -24,15 +24,25 @@
     tearDown(() => p?.dispose());
 
     test('can start', () async {
-      AnalysisServer server = AnalysisServer(io.Directory(sdk.sdkPath), [p.dir],
-          commandName: 'testing', argResults: null);
+      AnalysisServer server = AnalysisServer(
+        null,
+        io.Directory(sdk.sdkPath),
+        [p.dir],
+        commandName: 'testing',
+        argResults: null,
+      );
       await server.start();
       await server.shutdown();
     });
 
     test('can send message', () async {
-      AnalysisServer server = AnalysisServer(io.Directory(sdk.sdkPath), [p.dir],
-          commandName: 'testing', argResults: null);
+      AnalysisServer server = AnalysisServer(
+        null,
+        io.Directory(sdk.sdkPath),
+        [p.dir],
+        commandName: 'testing',
+        argResults: null,
+      );
       await server.start();
 
       final response = await server.getVersion();
diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart
index d2a43e3..ed11a45 100644
--- a/pkg/dartdev/test/commands/analyze_test.dart
+++ b/pkg/dartdev/test/commands/analyze_test.dart
@@ -376,6 +376,54 @@
     expect(stdout, contains('referenced_before_declaration'));
   });
 
+  group('--packages', () {
+    test('existing', () {
+      final foo = project(name: 'foo');
+      foo.file('lib/foo.dart', 'var my_foo = 0;');
+
+      p = project(mainSrc: '''
+import 'package:foo/foo.dart';
+void f() {
+  my_foo;
+}''');
+      p.file('my_packages.json', '''
+{
+  "configVersion": 2,
+  "packages": [
+    {
+      "name": "foo",
+      "rootUri": "file://${foo.dirPath}",
+      "packageUri": "lib/",
+      "languageVersion": "2.12"
+    }
+  ]
+}
+''');
+      var result = p.runSync([
+        'analyze',
+        '--packages=${p.findFile('my_packages.json').path}',
+        p.dirPath,
+      ]);
+
+      expect(result.exitCode, 0);
+      expect(result.stderr, isEmpty);
+      expect(result.stdout, contains('No issues found!'));
+    });
+
+    test('not existing', () {
+      p = project();
+      var result = p.runSync([
+        'analyze',
+        '--packages=no.such.file',
+        p.dirPath,
+      ]);
+
+      expect(result.exitCode, 64);
+      expect(result.stderr, contains("The file doesn't exist: no.such.file"));
+      expect(result.stderr, contains(_analyzeUsageText));
+    });
+  });
+
   group('display mode', () {
     final sampleInfoJson = {
       'severity': 'INFO',
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index a840db5..ca19764 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -88,7 +88,7 @@
   ExperimentalFlag.alternativeInvalidationStrategy: false,
   ExperimentalFlag.constFunctions: false,
   ExperimentalFlag.constantUpdate2018: true,
-  ExperimentalFlag.constructorTearoffs: false,
+  ExperimentalFlag.constructorTearoffs: true,
   ExperimentalFlag.controlFlowCollections: true,
   ExperimentalFlag.extensionMethods: true,
   ExperimentalFlag.extensionTypes: false,
diff --git a/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart b/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart
index f4005be..2fa4962 100644
--- a/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart
+++ b/runtime/tests/vm/dart/isolates/dart_api_create_lightweight_isolate_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // SharedObjects=ffi_test_functions
-// VMOptions=--no-enable-isolate-groups
+// VMOptions=
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:async';
diff --git a/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart b/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart
index 0a2fd1c..c14ce31 100644
--- a/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart
+++ b/runtime/tests/vm/dart_2/isolates/dart_api_create_lightweight_isolate_test.dart
@@ -5,7 +5,7 @@
 // @dart = 2.9
 
 // SharedObjects=ffi_test_functions
-// VMOptions=--no-enable-isolate-groups
+// VMOptions=
 // VMOptions=--enable-isolate-groups --disable-heap-verification
 
 import 'dart:async';
diff --git a/runtime/vm/experimental_features.cc b/runtime/vm/experimental_features.cc
index 680b3ed..5ebf334 100644
--- a/runtime/vm/experimental_features.cc
+++ b/runtime/vm/experimental_features.cc
@@ -18,15 +18,7 @@
 
 bool GetExperimentalFeatureDefault(ExperimentalFeature feature) {
   constexpr bool kFeatureValues[] = {
-    true,
-    true,
-    true,
-    true,
-    true,
-    true,
-    true,
-    true,
-    true,
+      true, true, true, true, true, true, true, true, true, true,
   };
   ASSERT(static_cast<size_t>(feature) < ARRAY_SIZE(kFeatureValues));
   return kFeatureValues[static_cast<int>(feature)];
@@ -34,15 +26,16 @@
 
 const char* GetExperimentalFeatureName(ExperimentalFeature feature) {
   constexpr const char* kFeatureNames[] = {
-    "nonfunction-type-aliases",
-    "non-nullable",
-    "extension-methods",
-    "constant-update-2018",
-    "control-flow-collections",
-    "generic-metadata",
-    "set-literals",
-    "spread-collections",
-    "triple-shift",
+      "nonfunction-type-aliases",
+      "non-nullable",
+      "extension-methods",
+      "constant-update-2018",
+      "control-flow-collections",
+      "generic-metadata",
+      "set-literals",
+      "spread-collections",
+      "triple-shift",
+      "constructor-tearoffs",
   };
   ASSERT(static_cast<size_t>(feature) < ARRAY_SIZE(kFeatureNames));
   return kFeatureNames[static_cast<int>(feature)];
diff --git a/runtime/vm/experimental_features.h b/runtime/vm/experimental_features.h
index f425f1c..c1db176 100644
--- a/runtime/vm/experimental_features.h
+++ b/runtime/vm/experimental_features.h
@@ -23,6 +23,7 @@
   set_literals,
   spread_collections,
   triple_shift,
+  constructor_tearoffs,
 };
 
 bool GetExperimentalFeatureDefault(ExperimentalFeature feature);
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index b5f86e7..1e3544d 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -196,7 +196,8 @@
   P(retain_code_objects, bool, true,                                           \
     "Serialize all code objects even if not otherwise "                        \
     "needed in the precompiled runtime.")                                      \
-  P(enable_isolate_groups, bool, true, "Enable isolate group support.")        \
+  P(enable_isolate_groups, bool, false,                                        \
+    "Enable isolate group support in AOT.")                                    \
   P(show_invisible_frames, bool, false,                                        \
     "Show invisible frames in stack traces.")                                  \
   D(trace_cha, bool, false, "Trace CHA operations")                            \
diff --git a/tests/language/constructor/reference_test.dart b/tests/language/constructor/reference_test.dart
index c1b33371..b15338b 100644
--- a/tests/language/constructor/reference_test.dart
+++ b/tests/language/constructor/reference_test.dart
@@ -80,33 +80,27 @@
   Foo();
   Foo.bar();
   Foo.bar.baz();
-//    ^
-// [cfe] Member not found: 'bar'.
 //        ^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
+// [cfe] The method 'baz' isn't defined for the class 'Foo<X> Function<X>()'.
   Foo<int>();
   Foo<int>.bar();
   Foo<int>.bar.baz();
-  // ^^^^^
-  // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED
-  // [cfe] This requires the 'constructor-tearoffs' language feature to be enabled.
-  //       ^
-  // [cfe] Member not found: 'bar'.
   //           ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
+  // [cfe] The method 'baz' isn't defined for the class 'Foo<int> Function()'.
   Foo.bar<int>();
   //  ^
   // [cfe] A constructor invocation can't have type arguments after the constructor name.
   //     ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
   Foo.bar<int>.baz();
-//    ^
-// [cfe] Couldn't find constructor 'bar'.
 //       ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
+//             ^
+// [cfe] The method 'baz' isn't defined for the class 'Foo<int> Function()'.
   Foo.bar.baz<int>();
-//    ^
-// [cfe] Member not found: 'bar'.
 //        ^^^
 // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
+// [cfe] The method 'baz' isn't defined for the class 'Foo<X> Function<X>()'.
 }
diff --git a/tools/VERSION b/tools/VERSION
index db0425c..63359a6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 75
+PRERELEASE 76
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 1ea44cc..50a38bb 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -122,9 +122,6 @@
   const-functions:
     help: "Allow more of the Dart language to be executed in const expressions."
 
-  constructor-tearoffs:
-    help: "Allow constructor tear-offs and explicit generic instantiations."
-
 # Experiment flag only used for testing.
   test-experiment:
     help: >-
@@ -196,3 +193,17 @@
       void main() {
         if ((A() >>> 1) == 42) print('feature enabled');
       }
+
+  constructor-tearoffs:
+    help: "Allow constructor tear-offs and explicit generic instantiations."
+    enabledIn: '2.15.0'
+    validation: |
+      class A {
+        A() {
+          print('feature enabled');
+        }
+      }
+      void main() {
+        var c = A.new;
+        c();
+      }
