diff --git a/Language/Enums/syntax_t08.dart b/Language/Enums/syntax_t08.dart
index 719fd1d..fe25a56 100644
--- a/Language/Enums/syntax_t08.dart
+++ b/Language/Enums/syntax_t08.dart
@@ -20,4 +20,6 @@
 
 main() {
   E e = E.b;
+//        ^
+// [cfe] unspecified
 }
diff --git a/Language/Enums/syntax_t09.dart b/Language/Enums/syntax_t09.dart
index f5560aa..a4e4694 100644
--- a/Language/Enums/syntax_t09.dart
+++ b/Language/Enums/syntax_t09.dart
@@ -11,6 +11,7 @@
 /// comma in the end of member list.
 /// @author ngl@unipro.ru
 
+
 enum E {a, b,, }
 //           ^
 // [analyzer] unspecified
@@ -18,4 +19,6 @@
 
 main() {
   E e = E.b;
+//        ^
+// [cfe] unspecified
 }
diff --git a/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t12.dart b/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t12.dart
index e558463..9486942 100644
--- a/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t12.dart
+++ b/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t12.dart
@@ -14,11 +14,14 @@
 /// brackets are mixed in an optional parameters declaration.
 /// @author rodionov
 
+
 foo({const p: 1]) {
 //              ^
 // [analyzer] unspecified
 // [cfe] unspecified
   p = 1;
+//^
+// [cfe] unspecified
 }
 
 main() {
diff --git a/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t13.dart b/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t13.dart
index 5e2583a..fc126be 100644
--- a/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t13.dart
+++ b/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t13.dart
@@ -14,6 +14,7 @@
 /// brackets are mixed in an optional parameters declaration.
 /// @author rodionov
 
+
 foo([int p = 1}) {
 //             ^
 // [analyzer] unspecified
diff --git a/Language/Functions/Formal_Parameters/Required_Formals/syntax_t03.dart b/Language/Functions/Formal_Parameters/Required_Formals/syntax_t03.dart
index b23f89d..465287b 100644
--- a/Language/Functions/Formal_Parameters/Required_Formals/syntax_t03.dart
+++ b/Language/Functions/Formal_Parameters/Required_Formals/syntax_t03.dart
@@ -27,11 +27,14 @@
 /// declared as const
 /// @author msyabro
 
+
 func(const x) {
 //   ^
 // [analyzer] unspecified
 // [cfe] unspecified
   x = 1;
+//^
+// [cfe] unspecified
 }
 
 main() {
diff --git a/LanguageFeatures/Enhanced-Enum/implementing_enum_A04_t25.dart b/LanguageFeatures/Enhanced-Enum/implementing_enum_A04_t25.dart
deleted file mode 100644
index b621bb6..0000000
--- a/LanguageFeatures/Enhanced-Enum/implementing_enum_A04_t25.dart
+++ /dev/null
@@ -1,49 +0,0 @@
-// 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.
-
-/// @assertion It’s currently a compile-time error for a class to implement,
-/// extend or mix-in the Enum class.
-///
-/// Because we want to allow interfaces and mixins that are intended to be
-/// applied to enum declarations, and therefore to assume Enum to be a
-/// superclass, we loosen that restriction to:
-/// ...
-/// It's a compile-time error if a class or mixin declaration has Enum as a
-/// superinterface, and that class or mixin declares or inherits a concrete
-/// instance member named `index`, `hashCode` or `==` (an `operator ==`
-/// declaration). That `index` member could override the `index` getter
-/// inherited from `Enum`, and we currently do not allow that. The `hashCode`
-/// and `operator ==` declarations would prevent the enum class from having
-/// "primitive equality", and we want to ensure that enums can be used in
-/// switches.
-///
-/// @description Check that it's a compile-time error if a class declaration has
-/// Enum as a superinterface, and it declares a non-abstract instance member
-/// named `operator ==`.
-/// @author sgrekhov@unipro.ru
-
-// SharedOptions=--enable-experiment=enhanced-enums
-
-abstract class E1 extends Enum {
-  bool operator ==(Object other) {
-//     ^^^^^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
-    return true;
-  }
-}
-
-abstract class E2 extends Enum {
-  bool operator ==(covariant E2 other) {
-//     ^^^^^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
-    return false;
-  }
-}
-
-main() {
-  print(E1);
-  print(E2);
-}
diff --git a/LanguageFeatures/Enhanced-Enum/implementing_enum_A04_t26.dart b/LanguageFeatures/Enhanced-Enum/implementing_enum_A04_t26.dart
deleted file mode 100644
index b397111..0000000
--- a/LanguageFeatures/Enhanced-Enum/implementing_enum_A04_t26.dart
+++ /dev/null
@@ -1,56 +0,0 @@
-// 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.
-
-/// @assertion It’s currently a compile-time error for a class to implement,
-/// extend or mix-in the Enum class.
-///
-/// Because we want to allow interfaces and mixins that are intended to be
-/// applied to enum declarations, and therefore to assume Enum to be a
-/// superclass, we loosen that restriction to:
-/// ...
-/// It's a compile-time error if a class or mixin declaration has Enum as a
-/// superinterface, and that class or mixin declares or inherits a concrete
-/// instance member named `index`, `hashCode` or `==` (an `operator ==`
-/// declaration). That `index` member could override the `index` getter
-/// inherited from `Enum`, and we currently do not allow that. The `hashCode`
-/// and `operator ==` declarations would prevent the enum class from having
-/// "primitive equality", and we want to ensure that enums can be used in
-/// switches.
-///
-/// @description Check that it's a compile-time error if an enum declaration has
-/// Enum as a superinterface, and it declares a non-abstract instance member
-/// named `operator ==`.
-/// @author sgrekhov@unipro.ru
-
-// SharedOptions=--enable-experiment=enhanced-enums
-
-enum E1 {
-  e1,
-  e2;
-
-  bool operator ==(Object other) {
-//     ^^^^^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
-    return true;
-  }
-}
-
-enum E2 {
-  e1(42),
-  e2(0);
-
-  const E2(int i);
-  bool operator ==(covariant E2 other) {
-//    ^^^^^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
-    return false;
-  }
-}
-
-main() {
-  print(E1);
-  print(E2);
-}
diff --git a/LanguageFeatures/Enhanced-Enum/implementing_enum_A04_t27.dart b/LanguageFeatures/Enhanced-Enum/implementing_enum_A04_t27.dart
deleted file mode 100644
index c45e1cc..0000000
--- a/LanguageFeatures/Enhanced-Enum/implementing_enum_A04_t27.dart
+++ /dev/null
@@ -1,49 +0,0 @@
-// 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.
-
-/// @assertion It’s currently a compile-time error for a class to implement,
-/// extend or mix-in the Enum class.
-///
-/// Because we want to allow interfaces and mixins that are intended to be
-/// applied to enum declarations, and therefore to assume Enum to be a
-/// superclass, we loosen that restriction to:
-/// ...
-/// It's a compile-time error if a class or mixin declaration has Enum as a
-/// superinterface, and that class or mixin declares or inherits a concrete
-/// instance member named `index`, `hashCode` or `==` (an `operator ==`
-/// declaration). That `index` member could override the `index` getter
-/// inherited from `Enum`, and we currently do not allow that. The `hashCode`
-/// and `operator ==` declarations would prevent the enum class from having
-/// "primitive equality", and we want to ensure that enums can be used in
-/// switches.
-///
-/// @description Check that it's a compile-time error if a mixin declaration has
-/// Enum as a superinterface, and it declares a non-abstract instance member
-/// named `operator ==`.
-/// @author sgrekhov@unipro.ru
-
-// SharedOptions=--enable-experiment=enhanced-enums
-
-mixin M1 on Enum {
-  bool operator ==(Object other) {
-//     ^^^^^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
-    return true;
-  }
-}
-
-mixin M2 on Enum {
-  bool operator ==(covariant E2 other) {
-//    ^^^^^^^^^^^
-// [analyzer] unspecified
-// [cfe] unspecified
-    return false;
-  }
-}
-
-main() {
-  print(M1);
-  print(M2);
-}
diff --git a/LanguageFeatures/Enhanced-Enum/semantics_A10_t05.dart b/LanguageFeatures/Enhanced-Enum/semantics_A10_t05.dart
index 8ae29c5..9af14d3 100644
--- a/LanguageFeatures/Enhanced-Enum/semantics_A10_t05.dart
+++ b/LanguageFeatures/Enhanced-Enum/semantics_A10_t05.dart
@@ -25,6 +25,9 @@
   e3;
 
   String toString([int index = 0]) => "E1";
+  bool operator ==(covariant E1 other) {
+    return true;
+  }
 }
 
 enum E2<T> {
@@ -35,13 +38,25 @@
   const E2(T t);
 
   String toString([int index = 0]) => "E2";
+  bool operator ==(covariant E2 other) {
+    return false;
+  }
 }
 
 main() {
   Expect.equals("E1", E1.e1.toString());
   Expect.equals("E1", E1.e2.toString(1));
   Expect.equals("E1", E1.e3.toString());
+  Expect.isTrue(E1.e1 == E1.e2);
+  Expect.isTrue(E1.e1 == E1.e3);
+  Expect.isTrue(E1.e3 == E1.e2);
   Expect.equals("E2", E2.e1.toString());
   Expect.equals("E2", E2.e2.toString(1));
   Expect.equals("E2", E2.e3.toString());
+  Expect.isFalse(E2.e1 == E2.e2);
+  Expect.isFalse(E2.e1 == E2.e3);
+  Expect.isFalse(E2.e3 == E2.e2);
+  Expect.isFalse(E2.e1 == E2.e1);
+  Expect.isFalse(E2.e2 == E2.e2);
+  Expect.isFalse(E2.e3 == E2.e3);
 }
diff --git a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/throw_A01_t01.dart b/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/throw_A01_t01.dart
deleted file mode 100644
index 9bcd2d1..0000000
--- a/LanguageFeatures/FinalizationRegistry/ffi/Finalizer/throw_A01_t01.dart
+++ /dev/null
@@ -1,37 +0,0 @@
-// 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.
-
-/// @assertion Finalization callbacks must not throw.
-///
-/// @description Checks that all exceptions thrown by finalization callbacks are
-/// ignored
-/// @author sgrekhov@unipro.ru
-
-import '../../gc_utils_lib.dart';
-import '../../../../Utils/expect.dart';
-
-int count = 0;
-String? returnedToken = null;
-
-final Finalizer finalizer = Finalizer((token) {
-  count++;
-  if (token == "throw") {
-    throw Exception("Some exception");
-  }
-  returnedToken = token;
-});
-
-@pragma('vm:never-inline')
-void attachToFinalizer() {
-  var o = Object();
-  finalizer.attach(o, "throw");
-  finalizer.attach(o, "Don't throw");
-}
-
-main() async {
-  attachToFinalizer();
-  await triggerGcWithDelay();
-  Expect.equals("Don't throw", returnedToken);
-  Expect.equals(2, count);
-}
