diff --git a/pkg/dev_compiler/analysis_options.yaml b/pkg/dev_compiler/analysis_options.yaml
index f93da08..f591c75 100644
--- a/pkg/dev_compiler/analysis_options.yaml
+++ b/pkg/dev_compiler/analysis_options.yaml
@@ -22,6 +22,7 @@
   rules:
     # Not enforced by lints at any version.
     - always_declare_return_types
+    - depend_on_referenced_packages
     - directives_ordering
     - omit_local_variable_types
     - prefer_single_quotes
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index f6fc3a2..6f81197 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -10,7 +10,6 @@
 
 import 'package:args/args.dart';
 import 'package:build_integration/file_system/multi_root.dart';
-import 'package:cli_util/cli_util.dart' show getSdkPath;
 import 'package:front_end/src/api_unstable/ddc.dart' as fe;
 import 'package:kernel/binary/ast_to_binary.dart' as kernel show BinaryPrinter;
 import 'package:kernel/class_hierarchy.dart';
@@ -837,6 +836,9 @@
 
 final defaultLibrarySpecPath = p.join(getSdkPath(), 'lib', 'libraries.json');
 
+/// Return the path to the runtime Dart SDK.
+String getSdkPath() => p.dirname(p.dirname(Platform.resolvedExecutable));
+
 /// Returns the absolute path to the default `package_config.json` file, or
 /// `null` if one could not be found.
 ///
diff --git a/pkg/dev_compiler/pubspec.yaml b/pkg/dev_compiler/pubspec.yaml
index 0d15516..acd4d9d 100644
--- a/pkg/dev_compiler/pubspec.yaml
+++ b/pkg/dev_compiler/pubspec.yaml
@@ -14,7 +14,6 @@
   bazel_worker: any
   build_integration:
     path: ../build_integration
-  cli_util: any
   collection: ^1.15.0
   front_end:
     path: ../front_end
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
index 90f0eef..461cf17 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_suite.dart
@@ -9,9 +9,9 @@
 import 'dart:io' show Directory, File, Platform;
 
 import 'package:browser_launcher/browser_launcher.dart' as browser;
-import 'package:cli_util/cli_util.dart';
 import 'package:dev_compiler/dev_compiler.dart';
 import 'package:dev_compiler/src/compiler/module_builder.dart';
+import 'package:dev_compiler/src/kernel/command.dart';
 import 'package:dev_compiler/src/kernel/module_metadata.dart';
 import 'package:front_end/src/api_unstable/ddc.dart' as fe;
 import 'package:front_end/src/compute_platform_binaries_location.dart' as fe;
diff --git a/pkg/dev_compiler/test/shared_test_options.dart b/pkg/dev_compiler/test/shared_test_options.dart
index 88013a3..7edff24 100644
--- a/pkg/dev_compiler/test/shared_test_options.dart
+++ b/pkg/dev_compiler/test/shared_test_options.dart
@@ -4,8 +4,8 @@
 
 // @dart = 2.9
 
-import 'package:cli_util/cli_util.dart';
 import 'package:dev_compiler/dev_compiler.dart';
+import 'package:dev_compiler/src/kernel/command.dart';
 import 'package:front_end/src/api_unstable/ddc.dart';
 import 'package:front_end/src/compute_platform_binaries_location.dart';
 import 'package:front_end/src/fasta/incremental_serializer.dart';
diff --git a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
index 65085dc..1e51ffb 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
@@ -28,6 +28,9 @@
   @override
   TypeDeclarationBuilder get origin;
 
+  /// Return `true` if this type declaration is an enum.
+  bool get isEnum;
+
   /// Creates the [DartType] corresponding to this declaration applied with
   /// [arguments] in [library] with the syntactical nullability defined by
   /// [nullabilityBuilder].
@@ -75,6 +78,9 @@
   bool get isTypeDeclaration => true;
 
   @override
+  bool get isEnum => false;
+
+  @override
   String get fullNameForErrors => name;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index 18b8478..d8e6d6a 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -47,6 +47,9 @@
             cls.fileOffset);
 
   @override
+  bool get isEnum => cls.isEnum;
+
+  @override
   DillClassBuilder get origin => this;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 422afdf..b2ab970 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -5371,7 +5371,7 @@
       } else {
         target = b.member;
       }
-      if (type is SourceEnumBuilder &&
+      if (type.isEnum &&
           !(libraryBuilder.enableEnhancedEnumsInLibrary &&
               target is Procedure &&
               target.kind == ProcedureKind.Factory)) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 2e8000f..7c41343 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -1111,6 +1111,7 @@
     TreeNode parent = variable.parent!;
     Expression implicitDowncast = inferrer.ensureAssignable(
         variable.type, inferredType, variableGet,
+        isVoidAllowed: true,
         fileOffset: parent.fileOffset,
         errorTemplate: templateForInLoopElementTypeNotAssignable,
         nullabilityErrorTemplate:
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index b6a5104..d23c72b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -456,6 +456,9 @@
   }
 
   @override
+  bool get isEnum => true;
+
+  @override
   TypeBuilder? get mixedInTypeBuilder => null;
 
   @override
@@ -614,7 +617,7 @@
             // be built via a body builder to detect potential errors.
             bodyBuilder = library.loader.createBodyBuilderForOutlineExpression(
                 library, this, this, scope, fileUri);
-            bodyBuilder.constantContext = ConstantContext.required;
+            bodyBuilder.constantContext = ConstantContext.inferred;
           }
 
           if (enumConstantInfo.argumentsBeginToken != null) {
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart b/pkg/front_end/testcases/enhanced_enums/issue48232.dart
new file mode 100644
index 0000000..633928f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+enum E {
+    v([]); // No error.
+  const E(_);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.expect
new file mode 100644
index 0000000..d829c61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.transformed.expect
new file mode 100644
index 0000000..d829c61
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.strong.transformed.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect
new file mode 100644
index 0000000..1f73072
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.textual_outline.expect
@@ -0,0 +1,2 @@
+enum E { v([]); const E(_); }
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.expect
new file mode 100644
index 0000000..018ab8b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.modular.expect
new file mode 100644
index 0000000..018ab8b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.modular.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.outline.expect
new file mode 100644
index 0000000..b2e8953
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.outline.expect
@@ -0,0 +1,21 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = const <self::E>[self::E::v];
+  static const field self::E v = const self::E::•(0, "v", const <dynamic>[]);
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///issue48232.dart:5:6 -> ListConstant(const <E*>[const E{_Enum.index: 0, _Enum._name: "v"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48232.dart:6:5 -> InstanceConstant(const E{_Enum.index: 0, _Enum._name: "v"})
+Extra constant evaluation: evaluated: 7, effectively constant: 2
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.transformed.expect
new file mode 100644
index 0000000..018ab8b
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48232.dart.weak.transformed.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E> values = #C4;
+  static const field self::E v = #C3;
+  const constructor •(core::int index, core::String name, dynamic _) → self::E
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "v"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = <self::E*>[#C3]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48232.dart:
+- E. (from org-dartlang-testcase:///issue48232.dart:7:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml b/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml
new file mode 100644
index 0000000..b6739e7
--- /dev/null
+++ b/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml
@@ -0,0 +1,9 @@
+# Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+
+entry_point: "main.dart"
+definitions: []
+position: "main.dart"
+expression: |
+  En(123, 'foo')
diff --git a/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml.expect b/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml.expect
new file mode 100644
index 0000000..447cbd7
--- /dev/null
+++ b/pkg/front_end/testcases/expression/instantiate_enum.expression.yaml.expect
@@ -0,0 +1,7 @@
+Errors: {
+  org-dartlang-debug:synthetic_debug_expression:1:1: Error: Enums can't be instantiated.
+  En(123, 'foo')
+  ^^
+}
+method /* from org-dartlang-debug:synthetic_debug_expression */ debugExpr() → dynamic
+  return invalid-expression "org-dartlang-debug:synthetic_debug_expression:1:1: Error: Enums can't be instantiated.\nEn(123, 'foo')\n^^";
diff --git a/pkg/front_end/testcases/expression/main.dart b/pkg/front_end/testcases/expression/main.dart
index 59f53f0..35045e1 100644
--- a/pkg/front_end/testcases/expression/main.dart
+++ b/pkg/front_end/testcases/expression/main.dart
@@ -127,3 +127,5 @@
       .fold<int>(0, (previousValue, element) => previousValue + element.length);
   print("xCombinedLength = $xCombinedLength");
 }
+
+enum En { a, b, c }
diff --git a/pkg/front_end/testcases/general/inferred_void.dart b/pkg/front_end/testcases/general/inferred_void.dart
new file mode 100644
index 0000000..5a39d07
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+void method() {}
+
+void v1 = method();
+var v2 = method();
+List<void> l1 = [method()];
+var l2 = [method()];
+
+test(Iterable<void> iterable, Stream<void> stream) async {
+  void v1 = method();
+  var v2 = method();
+  for (var v3 in iterable) {}
+  for (void v4 in iterable) {}
+  await for (var v5 in stream) {}
+  await for (void v6 in stream) {}
+  List<void> l1 = [method()];
+  var l2 = [method()];
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.textual_outline.expect b/pkg/front_end/testcases/general/inferred_void.dart.textual_outline.expect
new file mode 100644
index 0000000..258ee94
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+void method() {}
+void v1 = method();
+var v2 = method();
+List<void> l1 = [method()];
+var l2 = [method()];
+test(Iterable<void> iterable, Stream<void> stream) async {}
+main() {}
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/inferred_void.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..f8f634b
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+List<void> l1 = [method()];
+main() {}
+test(Iterable<void> iterable, Stream<void> stream) async {}
+var l2 = [method()];
+var v2 = method();
+void method() {}
+void v1 = method();
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.expect
new file mode 100644
index 0000000..c8d8b7d
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static field void v1 = self::method();
+static field void v2 = self::method();
+static field core::List<void> l1 = <void>[self::method()];
+static field core::List<void> l2 = <void>[self::method()];
+static method method() → void {}
+static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic async {
+  void v1 = self::method();
+  void v2 = self::method();
+  for (void v3 in iterable) {
+  }
+  for (void v4 in iterable) {
+  }
+  await for (void v5 in stream) {
+  }
+  await for (void v6 in stream) {
+  }
+  core::List<void> l1 = <void>[self::method()];
+  core::List<void> l2 = <void>[self::method()];
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.modular.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.modular.expect
new file mode 100644
index 0000000..c8d8b7d
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.modular.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static field void v1 = self::method();
+static field void v2 = self::method();
+static field core::List<void> l1 = <void>[self::method()];
+static field core::List<void> l2 = <void>[self::method()];
+static method method() → void {}
+static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic async {
+  void v1 = self::method();
+  void v2 = self::method();
+  for (void v3 in iterable) {
+  }
+  for (void v4 in iterable) {
+  }
+  await for (void v5 in stream) {
+  }
+  await for (void v6 in stream) {
+  }
+  core::List<void> l1 = <void>[self::method()];
+  core::List<void> l2 = <void>[self::method()];
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.outline.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.outline.expect
new file mode 100644
index 0000000..c0d467d
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+static field void v1;
+static field void v2;
+static field core::List<void> l1;
+static field core::List<void> l2;
+static method method() → void
+  ;
+static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic async 
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect b/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
new file mode 100644
index 0000000..6528bab
--- /dev/null
+++ b/pkg/front_end/testcases/general/inferred_void.dart.weak.transformed.expect
@@ -0,0 +1,101 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+import "dart:_internal" as _in;
+
+static field void v1 = self::method();
+static field void v2 = self::method();
+static field core::List<void> l1 = core::_GrowableList::_literal1<void>(self::method());
+static field core::List<void> l2 = core::_GrowableList::_literal1<void>(self::method());
+static method method() → void {}
+static method test(core::Iterable<void> iterable, asy::Stream<void> stream) → dynamic /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
+  core::bool* :is_sync = false;
+  dynamic :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  dynamic :saved_try_context_var1;
+  dynamic :exception0;
+  dynamic :stack_trace0;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L1:
+      {
+        void v1 = self::method();
+        void v2 = self::method();
+        {
+          core::Iterator<void> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<void>};
+          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+            void v3 = :sync-for-iterator.{core::Iterator::current}{void};
+            {}
+          }
+        }
+        {
+          core::Iterator<void> :sync-for-iterator = iterable.{core::Iterable::iterator}{core::Iterator<void>};
+          for (; :sync-for-iterator.{core::Iterator::moveNext}(){() → core::bool}; ) {
+            void v4 = :sync-for-iterator.{core::Iterator::current}{void};
+            {}
+          }
+        }
+        {
+          asy::Stream<void> :stream = stream;
+          asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
+          try
+            #L2:
+            while (true) {
+              dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              if(_in::unsafeCast<core::bool>(:result)) {
+                void v5 = :for-iterator.{asy::_StreamIterator::current}{void};
+                {}
+              }
+              else
+                break #L2;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              :result;
+            }
+        }
+        {
+          asy::Stream<void> :stream = stream;
+          asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
+          try
+            #L3:
+            while (true) {
+              dynamic #t4 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t5 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              if(_in::unsafeCast<core::bool>(:result)) {
+                void v6 = :for-iterator.{asy::_StreamIterator::current}{void};
+                {}
+              }
+              else
+                break #L3;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
+              [yield] let dynamic #t6 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              :result;
+            }
+        }
+        core::List<void> l1 = core::_GrowableList::_literal1<void>(self::method());
+        core::List<void> l2 = core::_GrowableList::_literal1<void>(self::method());
+      }
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart b/pkg/front_end/testcases/general/instantiate_enum/main.dart
new file mode 100644
index 0000000..85515b3
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'main_lib.dart';
+
+enum Enum1 { a, b, c }
+
+typedef Alias1 = Enum1;
+
+test() {
+  Enum1(123, 'foo');
+  Enum2(123, 'foo');
+  Alias1(123, 'foo');
+  Alias2(123, 'foo');
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect
new file mode 100644
index 0000000..9e362fc
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+import 'main_lib.dart';
+
+enum Enum1 { a, b, c }
+typedef Alias1 = Enum1;
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..596d8b2
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+import 'main_lib.dart';
+
+enum Enum1 { a, b, c }
+main() {}
+test() {}
+typedef Alias1 = Enum1;
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.expect
new file mode 100644
index 0000000..2976547
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+//   Enum1(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+//   Enum2(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+//   Alias1(123, 'foo');
+//   ^^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+//   Alias2(123, 'foo');
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+typedef Alias1 = self::Enum1;
+class Enum1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1> values = #C10;
+  static const field self::Enum1 a = #C3;
+  static const field self::Enum1 b = #C6;
+  static const field self::Enum1 c = #C9;
+  const constructor •(core::int index, core::String name) → self::Enum1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+  Enum1(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+  Enum2(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+  Alias1(123, 'foo');
+  ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+  Alias2(123, 'foo');
+  ^^^^^^";
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef Alias2 = self2::Enum2;
+class Enum2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self2::Enum2> values = #C14;
+  static const field self2::Enum2 a = #C11;
+  static const field self2::Enum2 b = #C12;
+  static const field self2::Enum2 c = #C13;
+  const constructor •(core::int index, core::String name) → self2::Enum2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum2.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum1 {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self::Enum1 {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "c"
+  #C9 = self::Enum1 {index:#C7, _name:#C8}
+  #C10 = <self::Enum1*>[#C3, #C6, #C9]
+  #C11 = self2::Enum2 {index:#C1, _name:#C2}
+  #C12 = self2::Enum2 {index:#C4, _name:#C5}
+  #C13 = self2::Enum2 {index:#C7, _name:#C8}
+  #C14 = <self2::Enum2*>[#C11, #C12, #C13]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main_lib.dart:
+- Enum2. (from org-dartlang-testcase:///main_lib.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-testcase:///main.dart:
+- Enum1. (from org-dartlang-testcase:///main.dart:7:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.modular.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.modular.expect
new file mode 100644
index 0000000..8b09079
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.modular.expect
@@ -0,0 +1,72 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+//   Enum1(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+//   Enum2(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+//   Alias1(123, 'foo');
+//   ^^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+//   Alias2(123, 'foo');
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+typedef Alias1 = self::Enum1;
+class Enum1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1> values = #C10;
+  static const field self::Enum1 a = #C3;
+  static const field self::Enum1 b = #C6;
+  static const field self::Enum1 c = #C9;
+  const constructor •(core::int index, core::String name) → self::Enum1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+  Enum1(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+  Enum2(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+  Alias1(123, 'foo');
+  ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+  Alias2(123, 'foo');
+  ^^^^^^";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum1 {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self::Enum1 {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "c"
+  #C9 = self::Enum1 {index:#C7, _name:#C8}
+  #C10 = <self::Enum1*>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main.dart:
+- Enum1. (from org-dartlang-testcase:///main.dart:7:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.outline.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.outline.expect
new file mode 100644
index 0000000..cc966f8
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.outline.expect
@@ -0,0 +1,66 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+typedef Alias1 = self::Enum1;
+class Enum1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1> values = const <self::Enum1>[self::Enum1::a, self::Enum1::b, self::Enum1::c];
+  static const field self::Enum1 a = const self::Enum1::•(0, "a");
+  static const field self::Enum1 b = const self::Enum1::•(1, "b");
+  static const field self::Enum1 c = const self::Enum1::•(2, "c");
+  const constructor •(core::int index, core::String name) → self::Enum1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef Alias2 = self2::Enum2;
+class Enum2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self2::Enum2> values = #C10;
+  static const field self2::Enum2 a = #C3;
+  static const field self2::Enum2 b = #C6;
+  static const field self2::Enum2 c = #C9;
+  const constructor •(core::int index, core::String name) → self2::Enum2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum2.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self2::Enum2 {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self2::Enum2 {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "c"
+  #C9 = self2::Enum2 {index:#C7, _name:#C8}
+  #C10 = <self2::Enum2*>[#C3, #C6, #C9]
+}
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///main.dart:7:6 -> ListConstant(const <Enum1*>[const Enum1{_Enum.index: 0, _Enum._name: "a"}, const Enum1{_Enum.index: 1, _Enum._name: "b"}, const Enum1{_Enum.index: 2, _Enum._name: "c"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:7:14 -> InstanceConstant(const Enum1{_Enum.index: 0, _Enum._name: "a"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:7:17 -> InstanceConstant(const Enum1{_Enum.index: 1, _Enum._name: "b"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///main.dart:7:20 -> InstanceConstant(const Enum1{_Enum.index: 2, _Enum._name: "c"})
+Extra constant evaluation: evaluated: 14, effectively constant: 4
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main_lib.dart:
+- Enum2. (from org-dartlang-testcase:///main_lib.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.transformed.expect b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..2976547
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main.dart.weak.transformed.expect
@@ -0,0 +1,98 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+//   Enum1(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+//   Enum2(123, 'foo');
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+//   Alias1(123, 'foo');
+//   ^^^^^^
+//
+// pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+//   Alias2(123, 'foo');
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+typedef Alias1 = self::Enum1;
+class Enum1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::Enum1> values = #C10;
+  static const field self::Enum1 a = #C3;
+  static const field self::Enum1 b = #C6;
+  static const field self::Enum1 c = #C9;
+  const constructor •(core::int index, core::String name) → self::Enum1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum1.${this.{core::_Enum::_name}{core::String}}";
+}
+static method test() → dynamic {
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:12:3: Error: Enums can't be instantiated.
+  Enum1(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:13:3: Error: Enums can't be instantiated.
+  Enum2(123, 'foo');
+  ^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:14:3: Error: Enums can't be instantiated.
+  Alias1(123, 'foo');
+  ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/general/instantiate_enum/main.dart:15:3: Error: Enums can't be instantiated.
+  Alias2(123, 'foo');
+  ^^^^^^";
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as self2;
+import "dart:core" as core;
+
+typedef Alias2 = self2::Enum2;
+class Enum2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self2::Enum2> values = #C14;
+  static const field self2::Enum2 a = #C11;
+  static const field self2::Enum2 b = #C12;
+  static const field self2::Enum2 c = #C13;
+  const constructor •(core::int index, core::String name) → self2::Enum2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "Enum2.${this.{core::_Enum::_name}{core::String}}";
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "a"
+  #C3 = self::Enum1 {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "b"
+  #C6 = self::Enum1 {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "c"
+  #C9 = self::Enum1 {index:#C7, _name:#C8}
+  #C10 = <self::Enum1*>[#C3, #C6, #C9]
+  #C11 = self2::Enum2 {index:#C1, _name:#C2}
+  #C12 = self2::Enum2 {index:#C4, _name:#C5}
+  #C13 = self2::Enum2 {index:#C7, _name:#C8}
+  #C14 = <self2::Enum2*>[#C11, #C12, #C13]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///main_lib.dart:
+- Enum2. (from org-dartlang-testcase:///main_lib.dart:5:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+
+org-dartlang-testcase:///main.dart:
+- Enum1. (from org-dartlang-testcase:///main.dart:7:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/instantiate_enum/main_lib.dart b/pkg/front_end/testcases/general/instantiate_enum/main_lib.dart
new file mode 100644
index 0000000..f59f17d
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/main_lib.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+enum Enum2 { a, b, c }
+
+typedef Alias2 = Enum2;
diff --git a/pkg/front_end/testcases/general/instantiate_enum/test.options b/pkg/front_end/testcases/general/instantiate_enum/test.options
new file mode 100644
index 0000000..bfe6dc8
--- /dev/null
+++ b/pkg/front_end/testcases/general/instantiate_enum/test.options
@@ -0,0 +1 @@
+main_lib.dart
\ No newline at end of file
diff --git a/pkg/front_end/testcases/general/issue48347.dart b/pkg/front_end/testcases/general/issue48347.dart
new file mode 100644
index 0000000..8b9e1ab
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+test(StreamController<void> _eventStreamController) async {
+  await for (final _ in _eventStreamController.stream) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48347.dart.textual_outline.expect
new file mode 100644
index 0000000..0278a37
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+import 'dart:async';
+
+test(StreamController<void> _eventStreamController) async {}
+main() {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48347.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..50c55af
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+import 'dart:async';
+
+main() {}
+test(StreamController<void> _eventStreamController) async {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.expect
new file mode 100644
index 0000000..555e190
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method test(asy::StreamController<void> _eventStreamController) → dynamic async {
+  await for (final void _ in _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>}) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect
new file mode 100644
index 0000000..555e190
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.modular.expect
@@ -0,0 +1,11 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method test(asy::StreamController<void> _eventStreamController) → dynamic async {
+  await for (final void _ in _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>}) {
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.outline.expect
new file mode 100644
index 0000000..3f670be
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.outline.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method test(asy::StreamController<void> _eventStreamController) → dynamic async 
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
new file mode 100644
index 0000000..b10bc16
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48347.dart.weak.transformed.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+import "dart:async";
+
+static method test(asy::StreamController<void> _eventStreamController) → dynamic /* originally async */ {
+  final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
+  core::bool* :is_sync = false;
+  dynamic :return_value;
+  (dynamic) → dynamic :async_op_then;
+  (core::Object, core::StackTrace) → dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  dynamic :saved_try_context_var0;
+  dynamic :saved_try_context_var1;
+  dynamic :exception0;
+  dynamic :stack_trace0;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L1:
+      {
+        {
+          asy::Stream<void> :stream = _eventStreamController.{asy::StreamController::stream}{asy::Stream<void>};
+          asy::_StreamIterator<void>? :for-iterator = new asy::_StreamIterator::•<void>(:stream);
+          try
+            #L2:
+            while (true) {
+              dynamic #t1 = asy::_asyncStarMoveNextHelper(:stream);
+              [yield] let dynamic #t2 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::moveNext}(){() → asy::Future<core::bool>}, :async_op_then, :async_op_error, :async_op) in null;
+              if(_in::unsafeCast<core::bool>(:result)) {
+                final void _ = :for-iterator.{asy::_StreamIterator::current}{void};
+                {}
+              }
+              else
+                break #L2;
+            }
+          finally
+            if(!(:for-iterator.{asy::_StreamIterator::_subscription}{asy::StreamSubscription<void>?} == null)) {
+              [yield] let dynamic #t3 = asy::_awaitHelper(:for-iterator.{asy::_StreamIterator::cancel}(){() → asy::Future<dynamic>}, :async_op_then, :async_op_error, :async_op) in null;
+              :result;
+            }
+        }
+      }
+      asy::_completeWithNoFutureOnAsyncReturn(:async_future, :return_value, :is_sync);
+      return;
+    }
+    on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
+      asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
+    }
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_op(){() → dynamic};
+  :is_sync = true;
+  return :async_future;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index bb12aa2..f762981 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -35,6 +35,7 @@
 enhanced_enums/instantiated_generic_enum_types: FormatterCrash
 enhanced_enums/issue48084: FormatterCrash
 enhanced_enums/issue48181: FormatterCrash
+enhanced_enums/issue48232: FormatterCrash
 enhanced_enums/malformed_constructors: FormatterCrash
 enhanced_enums/members: FormatterCrash
 enhanced_enums/named_arguments: FormatterCrash
diff --git a/runtime/bin/run_vm_tests.cc b/runtime/bin/run_vm_tests.cc
index 58d16b6..994f542 100644
--- a/runtime/bin/run_vm_tests.cc
+++ b/runtime/bin/run_vm_tests.cc
@@ -373,20 +373,19 @@
   TesterState::argv = dart_argv;
   TesterState::argc = dart_argc;
 
-  error = Dart::Init(
-      dart::bin::vm_snapshot_data, dart::bin::vm_snapshot_instructions,
-      /*create_group=*/CreateIsolateAndSetup,
-      /*initialize_isolate=*/nullptr,
-      /*shutdown_isolate=*/nullptr,
-      /*cleanup_isolate=*/nullptr,
-      /*cleanup_group=*/CleanupIsolateGroup,
-      /*thread_start=*/nullptr,
-      /*thread_exit=*/nullptr, dart::bin::DartUtils::OpenFile,
-      dart::bin::DartUtils::ReadFile, dart::bin::DartUtils::WriteFile,
-      dart::bin::DartUtils::CloseFile, /*entropy_source=*/nullptr,
-      /*get_service_assets=*/nullptr, start_kernel_isolate,
-      /*code_observer=*/nullptr, /*post_task=*/nullptr,
-      /*post_task_data*/ nullptr);
+  Dart_InitializeParams init_params;
+  memset(&init_params, 0, sizeof(init_params));
+  init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION;
+  init_params.vm_snapshot_data = dart::bin::vm_snapshot_data;
+  init_params.vm_snapshot_instructions = dart::bin::vm_snapshot_instructions;
+  init_params.create_group = CreateIsolateAndSetup;
+  init_params.cleanup_group = CleanupIsolateGroup;
+  init_params.file_open = dart::bin::DartUtils::OpenFile;
+  init_params.file_read = dart::bin::DartUtils::ReadFile;
+  init_params.file_write = dart::bin::DartUtils::WriteFile;
+  init_params.file_close = dart::bin::DartUtils::CloseFile;
+  init_params.start_kernel_isolate = start_kernel_isolate;
+  error = Dart::Init(&init_params);
   if (error != nullptr) {
     Syslog::PrintErr("Failed to initialize VM: %s\n", error);
     free(error);
diff --git a/runtime/bin/secure_socket_filter.cc b/runtime/bin/secure_socket_filter.cc
index efaa417..57c5829 100644
--- a/runtime/bin/secure_socket_filter.cc
+++ b/runtime/bin/secure_socket_filter.cc
@@ -728,6 +728,13 @@
       if (SSL_LOG_DATA) {
         Syslog::Print("SSL_read returned error %d\n", error);
       }
+      switch (error) {
+        case SSL_ERROR_SYSCALL:
+        case SSL_ERROR_SSL:
+          return -1;
+        default:
+          break;
+      }
       bytes_processed = 0;
     }
   }
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index e4e2869..ad53435 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -246,25 +246,7 @@
 #endif  // !defined(IS_SIMARM_X64)
 }
 
-char* Dart::DartInit(const uint8_t* vm_isolate_snapshot,
-                     const uint8_t* instructions_snapshot,
-                     Dart_IsolateGroupCreateCallback create_group,
-                     Dart_InitializeIsolateCallback initialize_isolate,
-                     Dart_IsolateShutdownCallback shutdown,
-                     Dart_IsolateCleanupCallback cleanup,
-                     Dart_IsolateGroupCleanupCallback cleanup_group,
-                     Dart_ThreadStartCallback thread_start,
-                     Dart_ThreadExitCallback thread_exit,
-                     Dart_FileOpenCallback file_open,
-                     Dart_FileReadCallback file_read,
-                     Dart_FileWriteCallback file_write,
-                     Dart_FileCloseCallback file_close,
-                     Dart_EntropySource entropy_source,
-                     Dart_GetVMServiceAssetsArchive get_service_assets,
-                     bool start_kernel_isolate,
-                     Dart_CodeObserver* observer,
-                     Dart_PostTaskCallback post_task,
-                     void* post_task_data) {
+char* Dart::DartInit(const Dart_InitializeParams* params) {
   CheckOffsets();
 
   if (!Flags::Initialized()) {
@@ -275,8 +257,8 @@
   }
 
   const Snapshot* snapshot = nullptr;
-  if (vm_isolate_snapshot != nullptr) {
-    snapshot = Snapshot::SetupFromBuffer(vm_isolate_snapshot);
+  if (params->vm_snapshot_data != nullptr) {
+    snapshot = Snapshot::SetupFromBuffer(params->vm_snapshot_data);
     if (snapshot == nullptr) {
       return Utils::StrDup("Invalid vm isolate snapshot seen");
     }
@@ -296,16 +278,17 @@
 
   UntaggedFrame::Init();
 
-  set_thread_start_callback(thread_start);
-  set_thread_exit_callback(thread_exit);
-  SetFileCallbacks(file_open, file_read, file_write, file_close);
-  set_entropy_source_callback(entropy_source);
-  set_post_task_callback(post_task);
-  set_post_task_data(post_task_data);
+  set_thread_start_callback(params->thread_start);
+  set_thread_exit_callback(params->thread_exit);
+  SetFileCallbacks(params->file_open, params->file_read, params->file_write,
+                   params->file_close);
+  set_entropy_source_callback(params->entropy_source);
+  set_post_task_callback(params->post_task);
+  set_post_task_data(params->post_task_data);
   OS::Init();
   NOT_IN_PRODUCT(CodeObservers::Init());
-  if (observer != nullptr) {
-    NOT_IN_PRODUCT(CodeObservers::RegisterExternal(*observer));
+  if (params->code_observer != nullptr) {
+    NOT_IN_PRODUCT(CodeObservers::RegisterExternal(*params->code_observer));
   }
   start_time_micros_ = OS::GetCurrentMonotonicMicros();
   VirtualMemory::Init();
@@ -364,8 +347,8 @@
     // really an isolate itself - it acts more as a container for VM-global
     // objects.
     std::unique_ptr<IsolateGroupSource> source(new IsolateGroupSource(
-        kVmIsolateName, kVmIsolateName, vm_isolate_snapshot,
-        instructions_snapshot, nullptr, -1, api_flags));
+        kVmIsolateName, kVmIsolateName, params->vm_snapshot_data,
+        params->vm_snapshot_instructions, nullptr, -1, api_flags));
     // ObjectStore should be created later, after null objects are initialized.
     auto group = new IsolateGroup(std::move(source), /*embedder_data=*/nullptr,
                                   /*object_store=*/nullptr, api_flags);
@@ -392,7 +375,7 @@
     ArgumentsDescriptor::Init();
     ICData::Init();
     SubtypeTestCache::Init();
-    if (vm_isolate_snapshot != NULL) {
+    if (params->vm_snapshot_data != nullptr) {
 #if defined(SUPPORT_TIMELINE)
       TimelineBeginEndScope tbes(Timeline::GetVMStream(), "ReadVMSnapshot");
 #endif
@@ -405,7 +388,7 @@
           return Utils::StrDup("JIT runtime cannot run a precompiled snapshot");
 #endif
         }
-        if (instructions_snapshot == NULL) {
+        if (params->vm_snapshot_instructions == nullptr) {
           return Utils::StrDup("Missing instructions snapshot");
         }
       } else if (Snapshot::IsFull(vm_snapshot_kind_)) {
@@ -426,7 +409,7 @@
       } else {
         return Utils::StrDup("Invalid vm isolate snapshot seen");
       }
-      FullSnapshotReader reader(snapshot, instructions_snapshot, T);
+      FullSnapshotReader reader(snapshot, params->vm_snapshot_instructions, T);
       const Error& error = Error::Handle(reader.ReadVMSnapshot());
       if (!error.IsNull()) {
         // Must copy before leaving the zone.
@@ -496,15 +479,15 @@
   Api::InitHandles();
 
   Thread::ExitIsolate();  // Unregister the VM isolate from this thread.
-  Isolate::SetCreateGroupCallback(create_group);
-  Isolate::SetInitializeCallback_(initialize_isolate);
-  Isolate::SetShutdownCallback(shutdown);
-  Isolate::SetCleanupCallback(cleanup);
-  Isolate::SetGroupCleanupCallback(cleanup_group);
+  Isolate::SetCreateGroupCallback(params->create_group);
+  Isolate::SetInitializeCallback_(params->initialize_isolate);
+  Isolate::SetShutdownCallback(params->shutdown_isolate);
+  Isolate::SetCleanupCallback(params->cleanup_isolate);
+  Isolate::SetGroupCleanupCallback(params->cleanup_group);
 
 #ifndef PRODUCT
   const bool support_service = true;
-  Service::SetGetServiceAssetsCallback(get_service_assets);
+  Service::SetGetServiceAssetsCallback(params->get_service_assets);
 #else
   const bool support_service = false;
 #endif
@@ -518,7 +501,7 @@
   }
 
 #ifndef DART_PRECOMPILED_RUNTIME
-  if (start_kernel_isolate) {
+  if (params->start_kernel_isolate) {
     KernelIsolate::InitializeState();
   }
 #endif  // DART_PRECOMPILED_RUNTIME
@@ -526,37 +509,14 @@
   return NULL;
 }
 
-char* Dart::Init(const uint8_t* vm_isolate_snapshot,
-                 const uint8_t* instructions_snapshot,
-                 Dart_IsolateGroupCreateCallback create_group,
-                 Dart_InitializeIsolateCallback initialize_isolate,
-                 Dart_IsolateShutdownCallback shutdown,
-                 Dart_IsolateCleanupCallback cleanup,
-                 Dart_IsolateGroupCleanupCallback cleanup_group,
-                 Dart_ThreadStartCallback thread_start,
-                 Dart_ThreadExitCallback thread_exit,
-                 Dart_FileOpenCallback file_open,
-                 Dart_FileReadCallback file_read,
-                 Dart_FileWriteCallback file_write,
-                 Dart_FileCloseCallback file_close,
-                 Dart_EntropySource entropy_source,
-                 Dart_GetVMServiceAssetsArchive get_service_assets,
-                 bool start_kernel_isolate,
-                 Dart_CodeObserver* observer,
-                 Dart_PostTaskCallback post_task,
-                 void* post_task_data) {
+char* Dart::Init(const Dart_InitializeParams* params) {
   if (!init_state_.SetInitializing()) {
     return Utils::StrDup(
         "Bad VM initialization state, "
         "already initialized or "
         "multiple threads initializing the VM.");
   }
-  char* retval =
-      DartInit(vm_isolate_snapshot, instructions_snapshot, create_group,
-               initialize_isolate, shutdown, cleanup, cleanup_group,
-               thread_start, thread_exit, file_open, file_read, file_write,
-               file_close, entropy_source, get_service_assets,
-               start_kernel_isolate, observer, post_task, post_task_data);
+  char* retval = DartInit(params);
   if (retval != NULL) {
     init_state_.ResetInitializing();
     return retval;
diff --git a/runtime/vm/dart.h b/runtime/vm/dart.h
index 5a170c2..9b88af1 100644
--- a/runtime/vm/dart.h
+++ b/runtime/vm/dart.h
@@ -29,25 +29,7 @@
  public:
   // Returns null if initialization succeeds, otherwise returns an error message
   // (caller owns error message and has to free it).
-  static char* Init(const uint8_t* vm_snapshot_data,
-                    const uint8_t* vm_snapshot_instructions,
-                    Dart_IsolateGroupCreateCallback create_group,
-                    Dart_InitializeIsolateCallback initialize_isolate,
-                    Dart_IsolateShutdownCallback shutdown,
-                    Dart_IsolateCleanupCallback cleanup,
-                    Dart_IsolateGroupCleanupCallback cleanup_group,
-                    Dart_ThreadStartCallback thread_start,
-                    Dart_ThreadExitCallback thread_exit,
-                    Dart_FileOpenCallback file_open,
-                    Dart_FileReadCallback file_read,
-                    Dart_FileWriteCallback file_write,
-                    Dart_FileCloseCallback file_close,
-                    Dart_EntropySource entropy_source,
-                    Dart_GetVMServiceAssetsArchive get_service_assets,
-                    bool start_kernel_isolate,
-                    Dart_CodeObserver* observer,
-                    Dart_PostTaskCallback post_task,
-                    void* post_task_data);
+  static char* Init(const Dart_InitializeParams* params);
 
   // Returns null if cleanup succeeds, otherwise returns an error message
   // (caller owns error message and has to free it).
@@ -176,25 +158,7 @@
   static Dart_GCEventCallback gc_event_callback() { return gc_event_callback_; }
 
  private:
-  static char* DartInit(const uint8_t* vm_snapshot_data,
-                        const uint8_t* vm_snapshot_instructions,
-                        Dart_IsolateGroupCreateCallback create_group,
-                        Dart_InitializeIsolateCallback initialize_isolate,
-                        Dart_IsolateShutdownCallback shutdown,
-                        Dart_IsolateCleanupCallback cleanup,
-                        Dart_IsolateGroupCleanupCallback cleanup_group,
-                        Dart_ThreadStartCallback thread_start,
-                        Dart_ThreadExitCallback thread_exit,
-                        Dart_FileOpenCallback file_open,
-                        Dart_FileReadCallback file_read,
-                        Dart_FileWriteCallback file_write,
-                        Dart_FileCloseCallback file_close,
-                        Dart_EntropySource entropy_source,
-                        Dart_GetVMServiceAssetsArchive get_service_assets,
-                        bool start_kernel_isolate,
-                        Dart_CodeObserver* observer,
-                        Dart_PostTaskCallback post_task,
-                        void* post_task_data);
+  static char* DartInit(const Dart_InitializeParams* params);
 
   static constexpr const char* kVmIsolateName = "vm-isolate";
 
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index b421ddc..d7d2208 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1204,15 +1204,7 @@
         "Invalid Dart_InitializeParams version.");
   }
 
-  return Dart::Init(params->vm_snapshot_data, params->vm_snapshot_instructions,
-                    params->create_group, params->initialize_isolate,
-                    params->shutdown_isolate, params->cleanup_isolate,
-                    params->cleanup_group, params->thread_start,
-                    params->thread_exit, params->file_open, params->file_read,
-                    params->file_write, params->file_close,
-                    params->entropy_source, params->get_service_assets,
-                    params->start_kernel_isolate, params->code_observer,
-                    params->post_task, params->post_task_data);
+  return Dart::Init(params);
 }
 
 DART_EXPORT char* Dart_Cleanup() {
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
index 89c90d5..9c9e4b9 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
@@ -836,7 +836,7 @@
     if (!savedLocals) {
       // Record the field on first execution so we can reset it later if
       // needed (hot restart).
-      $_resetFields.push(() => {
+      $resetFields.push(() => {
         init = initializer;
         value = null;
         savedLocals = false;
@@ -860,9 +860,17 @@
   $desc.configurable = true;
   if ($desc.set != null) {
     $desc.set = function(x) {
+      if (!savedLocals) {
+        $resetFields.push(() => {
+          init = initializer;
+          value = null;
+          savedLocals = false;
+          initialized = false;
+        });
+        savedLocals = true;
+      }
       init = null;
       value = x;
-      // savedLocals and initialized are dead since init is set to null
     };
   }
   return ${defineProperty(to, name, desc)};
@@ -873,6 +881,9 @@
   const initializer = $desc.get;
   let init = initializer;
   let value = null;
+  // Tracks if these local variables have been saved so they can be restored
+  // after a hot restart.
+  let savedLocals = false;
   $desc.get = function() {
     if (init == null) return value;
     let f = init;
@@ -881,10 +892,14 @@
 
     // On the first (non-cyclic) execution, record the field so we can reset it
     // later if needed (hot restart).
-    $_resetFields.push(() => {
-      init = initializer;
-      value = null;
-    });
+    if (!savedLocals) {
+      $resetFields.push(() => {
+        init = initializer;
+        value = null;
+        savedLocals = false;
+      });
+      savedLocals = true;
+    }
 
     // Try to evaluate the field, using try+catch to ensure we implement the
     // correct Dart error semantics.
@@ -901,6 +916,14 @@
   $desc.configurable = true;
   if ($desc.set != null) {
     $desc.set = function(x) {
+      if (!savedLocals) {
+        $resetFields.push(() => {
+          init = initializer;
+          value = null;
+          savedLocals = false;
+        });
+        savedLocals = true;
+      }
       init = null;
       value = x;
     };
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
index af599c3..8b677f1 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
@@ -183,7 +183,7 @@
 /// This is populated by [defineLazyField] and only contains fields that have
 /// been initialized.
 @notNull
-final List<void Function()> _resetFields = JS('', '[]');
+final List<void Function()> resetFields = JS('', '[]');
 
 /// A counter to track each time [hotRestart] is invoked. This is used to ensure
 /// that pending callbacks that were created on a previous iteration (e.g. a
@@ -199,8 +199,8 @@
 void hotRestart() {
   // TODO(sigmund): prevent DOM callbacks from firing.
   hotRestartIteration++;
-  for (var f in _resetFields) f();
-  _resetFields.clear();
+  for (var f in resetFields) f();
+  resetFields.clear();
   for (var m in _cacheMaps) JS('', '#.clear()', m);
   _cacheMaps.clear();
   JS('', '#.clear()', _nullComparisonSet);
diff --git a/tests/dartdevc/hot_restart_late_test.dart b/tests/dartdevc/hot_restart_late_test.dart
index ab37cbc..32a31d7 100644
--- a/tests/dartdevc/hot_restart_late_test.dart
+++ b/tests/dartdevc/hot_restart_late_test.dart
@@ -6,35 +6,120 @@
 
 // Requirements=nnbd
 
-import 'package:expect/expect.dart';
-import 'dart:_runtime' as dart;
+import 'dart:_runtime' as dart show hotRestart, resetFields;
 
-late double l;
+import 'package:expect/expect.dart';
+
+late String noInitializer;
+late int withInitializer = 1;
 
 class Lates {
-  static late String s;
+  static late String noInitializer;
+  static late int withInitializer = 2;
+}
+
+class LatesGeneric<T> {
+  static late String noInitializer;
+  static late int withInitializer = 3;
 }
 
 main() {
-  Expect.throws(() => Lates.s);
-  Expect.throws(() => l);
-  Lates.s = "set";
-  l = 1.62;
-  Expect.equals(Lates.s, "set");
-  Expect.equals(l, 1.62);
+  // Read this static field first to avoid interference with other reset counts.
+  var weakNullSafety = hasUnsoundNullSafety;
+
+  // TODO(42495) `Expect.throws` contains the use of a const that triggers an
+  // extra field reset but consts are not correctly reset on hot restart so the
+  // extra reset only appears once. Perform an initial Expect.throws here to
+  // avoid confusion with the reset counts later.
+  Expect.throws(() => throw 'foo');
+
+  var resetFieldCount = dart.resetFields.length;
+
+  // Set uninitialized static late fields. Avoid calling getters for these
+  // statics to ensure they are reset even if they are never accessed.
+  noInitializer = 'set via setter';
+  Lates.noInitializer = 'Lates set via setter';
+  LatesGeneric.noInitializer = 'LatesGeneric set via setter';
+
+  // Initialized statics should contain their values.
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Lates.withInitializer);
+  Expect.equals(3, LatesGeneric.withInitializer);
+
+  // In weak null safety the late field lowering introduces a second static
+  // field that tracks if late field has been initialized thus doubling the
+  // number of expected resets.
+  //
+  // In sound null safety non-nullable fields don't require the extra static to
+  // track initialization because null is used as a sentinel value.
+  //
+  // Weak Null Safety - 12 total field resets
+  //  - 3 isSet write/resets for uninitialized field writes.
+  //  - 3 write/resets for the actual uninitialized field writes.
+  //  - 3 isSet reads/resets for initialized field reads.
+  //  - 3 reads/resets for the actual initialized field reads.
+  //
+  // Sound Null Safety - 6 total field resets:
+  //  - 3 write/resets for the actual uninitialized field writes.
+  //  - 3 reads/resets for the actual initialized field reads.
+  var expectedResets =
+      weakNullSafety ? resetFieldCount + 12 : resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
 
   dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
 
-  Expect.throws(() => Lates.s);
-  Expect.throws(() => l);
-  Lates.s = "set";
-  Expect.equals(Lates.s, "set");
-  l = 1.62;
-  Expect.equals(l, 1.62);
+  // Late statics should throw on get when not initialized.
+  Expect.throws(() => noInitializer);
+  Expect.throws(() => Lates.noInitializer);
+  Expect.throws(() => LatesGeneric.noInitializer);
+
+  // Set uninitialized static late fields again.
+  noInitializer = 'set via setter';
+  Lates.noInitializer = 'Lates set via setter';
+  LatesGeneric.noInitializer = 'LatesGeneric set via setter';
+
+  // All statics should contain their set values.
+  Expect.equals('set via setter', noInitializer);
+  Expect.equals('Lates set via setter', Lates.noInitializer);
+  Expect.equals('LatesGeneric set via setter', LatesGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Lates.withInitializer);
+  Expect.equals(3, LatesGeneric.withInitializer);
+
+  // Weak Null Safety - 12 total field resets
+  //  - 3 isSet write/resets for uninitialized field writes.
+  //  - 3 write/resets for the actual uninitialized field writes.
+  //  - 3 isSet reads/resets for initialized field reads.
+  //  - 3 reads/resets for the actual initialized field reads.
+  // Sound Null Safety - 6 total field resets:
+  //  - 3 write/resets for the actual uninitialized field writes.
+  //  - 3 reads/resets for the actual initialized field reads.
+  expectedResets = weakNullSafety ? resetFieldCount + 12 : resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
 
   dart.hotRestart();
   dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
 
-  Expect.throws(() => Lates.s);
-  Expect.throws(() => l);
+  // Late statics should throw on get when not initialized.
+  Expect.throws(() => noInitializer);
+  Expect.throws(() => Lates.noInitializer);
+  Expect.throws(() => LatesGeneric.noInitializer);
+
+  // Initialized statics should contain their values.
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Lates.withInitializer);
+  Expect.equals(3, LatesGeneric.withInitializer);
+
+  // Weak Null Safety - 9 total field resets:
+  //  - 3 isSet reads/resets for uninitialized field reads.
+  //  - 3 isSet reads/resets for initialized field reads.
+  //  - 3 reads/resets for the actual initialized field reads.
+  //
+  // Sound Null Safety - 6 total field resets:
+  //  - 3 reads/resets for actual uninitialized field reads.
+  //  - 3 reads/resets for the actual initialized field reads.
+  expectedResets = weakNullSafety ? resetFieldCount + 9 : resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
 }
diff --git a/tests/dartdevc/hot_restart_static_test.dart b/tests/dartdevc/hot_restart_static_test.dart
new file mode 100644
index 0000000..c26c298
--- /dev/null
+++ b/tests/dartdevc/hot_restart_static_test.dart
@@ -0,0 +1,84 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests that static fields are properly reset after hot restarts.
+
+// Requirements=nnbd
+
+import 'dart:_runtime' as dart show hotRestart, resetFields;
+
+import 'package:expect/expect.dart';
+
+String? noInitializer;
+int withInitializer = 1;
+
+class Statics {
+  static String? noInitializer;
+  static int withInitializer = 2;
+}
+
+class StaticsGeneric<T> {
+  static String? noInitializer;
+  static int withInitializer = 3;
+}
+
+main() {
+  var resetFieldCount = dart.resetFields.length;
+
+  // Set static fields without explicit initializers. Avoid calling getters for
+  // these statics to ensure they are reset even if they are never accessed.
+  noInitializer = 'set via setter';
+  Statics.noInitializer = 'Statics set via setter';
+  StaticsGeneric.noInitializer = 'StaticsGeneric set via setter';
+
+  // Initialized statics should contain their values.
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six new field resets from 3 setter calls and 3 getter calls.
+  var expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+
+  dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
+
+  // Uninitialized statics have been reset to their implicit null initial state.
+  Expect.equals(null, noInitializer);
+  Expect.equals(null, Statics.noInitializer);
+  Expect.equals(null, StaticsGeneric.noInitializer);
+
+  noInitializer = 'set via setter';
+  Statics.noInitializer = 'Statics set via setter';
+  StaticsGeneric.noInitializer = 'StaticsGeneric set via setter';
+
+  // All statics should contain their set values.
+  Expect.equals('set via setter', noInitializer);
+  Expect.equals('Statics set via setter', Statics.noInitializer);
+  Expect.equals('StaticsGeneric set via setter', StaticsGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six total new field resets despite getter and setter calls on the same
+  // static fields.
+  expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+
+  dart.hotRestart();
+  dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
+
+  // All statics should contain their initial values.
+  Expect.equals(null, noInitializer);
+  Expect.equals(null, Statics.noInitializer);
+  Expect.equals(null, StaticsGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six new field resets from 6 getter calls.
+  expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+}
diff --git a/tests/dartdevc_2/hot_restart_static_test.dart b/tests/dartdevc_2/hot_restart_static_test.dart
new file mode 100644
index 0000000..73e93d1
--- /dev/null
+++ b/tests/dartdevc_2/hot_restart_static_test.dart
@@ -0,0 +1,84 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.9
+
+// Tests that static fields are properly reset after hot restarts.
+
+import 'dart:_runtime' as dart show hotRestart, resetFields;
+
+import 'package:expect/expect.dart';
+
+String noInitializer;
+int withInitializer = 1;
+
+class Statics {
+  static String noInitializer;
+  static int withInitializer = 2;
+}
+
+class StaticsGeneric<T> {
+  static String noInitializer;
+  static int withInitializer = 3;
+}
+
+main() {
+  var resetFieldCount = dart.resetFields.length;
+
+  // Set static fields without explicit initializers. Avoid calling getters for
+  // these statics to ensure they are reset even if they are never accessed.
+  noInitializer = 'set via setter';
+  Statics.noInitializer = 'Statics set via setter';
+  StaticsGeneric.noInitializer = 'StaticsGeneric set via setter';
+
+  // Initialized statics should contain their values.
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six new field resets from 3 setter calls and 3 getter calls.
+  var expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+
+  dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
+
+  // Uninitialized statics have been reset to their implicit null initial state.
+  Expect.equals(null, noInitializer);
+  Expect.equals(null, Statics.noInitializer);
+  Expect.equals(null, StaticsGeneric.noInitializer);
+
+  noInitializer = 'set via setter';
+  Statics.noInitializer = 'Statics set via setter';
+  StaticsGeneric.noInitializer = 'StaticsGeneric set via setter';
+
+  // All statics should contain their set values.
+  Expect.equals('set via setter', noInitializer);
+  Expect.equals('Statics set via setter', Statics.noInitializer);
+  Expect.equals('StaticsGeneric set via setter', StaticsGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six total new field resets despite getter and setter calls on the same
+  // static fields.
+  expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+
+  dart.hotRestart();
+  dart.hotRestart();
+  resetFieldCount = dart.resetFields.length;
+
+  // All statics should contain their initial values.
+  Expect.equals(null, noInitializer);
+  Expect.equals(null, Statics.noInitializer);
+  Expect.equals(null, StaticsGeneric.noInitializer);
+  Expect.equals(1, withInitializer);
+  Expect.equals(2, Statics.withInitializer);
+  Expect.equals(3, StaticsGeneric.withInitializer);
+
+  // Six new field resets from 6 getter calls.
+  expectedResets = resetFieldCount + 6;
+  Expect.equals(expectedResets, dart.resetFields.length);
+}
diff --git a/tests/standalone/io/raw_secure_socket_ssl_read_error_test.dart b/tests/standalone/io/raw_secure_socket_ssl_read_error_test.dart
new file mode 100644
index 0000000..251a748
--- /dev/null
+++ b/tests/standalone/io/raw_secure_socket_ssl_read_error_test.dart
@@ -0,0 +1,69 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=
+// VMOptions=--short_socket_read
+// VMOptions=--short_socket_write
+// VMOptions=--short_socket_read --short_socket_write
+// OtherResources=certificates/server_chain.pem
+// OtherResources=certificates/server_key.pem
+// OtherResources=certificates/trusted_certs.pem
+// OtherResources=certificates/untrusted_server_chain.pem
+// OtherResources=certificates/untrusted_server_key.pem
+
+import "dart:io";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+late InternetAddress HOST;
+String localFile(path) => Platform.script.resolve(path).toFilePath();
+
+SecurityContext serverContext = new SecurityContext()
+  ..useCertificateChain(localFile('certificates/server_chain.pem'))
+  ..usePrivateKey(localFile('certificates/server_key.pem'),
+      password: 'dartdart');
+
+SecurityContext clientContext = new SecurityContext()
+  ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+testSslReadError() async {
+  // This test provokes an error in the BoringSSL `SSL_read` function by
+  // sending unencrypted bytes through a secure connection.
+  // See https://github.com/dart-lang/sdk/issues/48311
+  final serverSocket = await RawServerSocket.bind(HOST, 0);
+  serverSocket.forEach((socket) async {
+    final secureSocket = await RawSecureSocket.secureServer(
+        socket, serverContext,
+        subscription: socket.listen((event) {}));
+    secureSocket.write([1, 2, 3]);
+    // Send content using the original unencrypted connection to provoke a
+    // TtsException in the client.
+    socket.write([1, 2, 3]);
+    secureSocket.close();
+    serverSocket.close();
+  });
+
+  final Socket clientSocket = await Socket.connect(HOST, serverSocket.port);
+  final secureClientSocket =
+      await SecureSocket.secure(clientSocket, context: clientContext);
+  secureClientSocket.listen((data) {
+    Expect.fail("expected TlsException");
+  }, onError: (err) {
+    Expect.isTrue(err is TlsException, "unexpected error: $err");
+    secureClientSocket.close();
+    clientSocket.close();
+  });
+}
+
+main() {
+  print("asyncStart main");
+  asyncStart();
+  InternetAddress.lookup("localhost").then((hosts) async {
+    HOST = hosts.first;
+    await testSslReadError();
+    print("asyncEnd main");
+    asyncEnd();
+  });
+}
diff --git a/tests/standalone_2/io/raw_secure_socket_ssl_read_error_test.dart b/tests/standalone_2/io/raw_secure_socket_ssl_read_error_test.dart
new file mode 100644
index 0000000..e91f9e2
--- /dev/null
+++ b/tests/standalone_2/io/raw_secure_socket_ssl_read_error_test.dart
@@ -0,0 +1,71 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// VMOptions=
+// VMOptions=--short_socket_read
+// VMOptions=--short_socket_write
+// VMOptions=--short_socket_read --short_socket_write
+// OtherResources=certificates/server_chain.pem
+// OtherResources=certificates/server_key.pem
+// OtherResources=certificates/trusted_certs.pem
+// OtherResources=certificates/untrusted_server_chain.pem
+// OtherResources=certificates/untrusted_server_key.pem
+
+// @dart = 2.9
+
+import "dart:io";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+InternetAddress HOST;
+String localFile(path) => Platform.script.resolve(path).toFilePath();
+
+SecurityContext serverContext = new SecurityContext()
+  ..useCertificateChain(localFile('certificates/server_chain.pem'))
+  ..usePrivateKey(localFile('certificates/server_key.pem'),
+      password: 'dartdart');
+
+SecurityContext clientContext = new SecurityContext()
+  ..setTrustedCertificates(localFile('certificates/trusted_certs.pem'));
+
+testSslReadError() async {
+  // This test provokes an error in the BoringSSL `SSL_read` function by
+  // sending unencrypted bytes through a secure connection.
+  // See https://github.com/dart-lang/sdk/issues/48311
+  final serverSocket = await RawServerSocket.bind(HOST, 0);
+  serverSocket.forEach((socket) async {
+    final secureSocket = await RawSecureSocket.secureServer(
+        socket, serverContext,
+        subscription: socket.listen((event) {}));
+    secureSocket.write([1, 2, 3]);
+    // Send content using the original unencrypted connection to provoke a
+    // TtsException in the client.
+    socket.write([1, 2, 3]);
+    secureSocket.close();
+    serverSocket.close();
+  });
+
+  final Socket clientSocket = await Socket.connect(HOST, serverSocket.port);
+  final secureClientSocket =
+      await SecureSocket.secure(clientSocket, context: clientContext);
+  secureClientSocket.listen((data) {
+    Expect.fail("expected TlsException");
+  }, onError: (err) {
+    Expect.isTrue(err is TlsException, "unexpected error: $err");
+    secureClientSocket.close();
+    clientSocket.close();
+  });
+}
+
+main() {
+  print("asyncStart main");
+  asyncStart();
+  InternetAddress.lookup("localhost").then((hosts) async {
+    HOST = hosts.first;
+    await testSslReadError();
+    print("asyncEnd main");
+    asyncEnd();
+  });
+}
diff --git a/tools/VERSION b/tools/VERSION
index d52241c..754897b 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 99
+PRERELEASE 100
 PRERELEASE_PATCH 0
\ No newline at end of file
