[vm/nnbd] Finish migration of vm/cc tests to NNBD

Also, vm/cc tests are enabled on NNBD bots.

Issue: https://github.com/dart-lang/sdk/issues/41314
Change-Id: Iddfa68de3de041436a009dd3426431211471b4dc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149780
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index aee1cd1..96f6b1a 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -386,12 +386,7 @@
 
 [ $compiler == dartk || $compiler == dartkb ]
 cc/DartAPI_New: Fail # Issue #33041
-cc/DartGeneratedArrayLiteralMessages: Crash # Issue 32190
-cc/FullSnapshot1: Crash # Issue 32190
 cc/IsolateReload_LibraryLookup: Fail, Crash # Issue 32190
-cc/MismatchedSnapshotKinds: Fail, Crash, OK # Script snapshots not supported in Dart 2
-cc/ScriptSnapshot1: Fail, Crash, OK # Script snapshots not supported in Dart 2
-cc/ScriptSnapshotsUpdateSubclasses: Fail, Crash, OK # Script snapshots not supported in Dart 2
 dart/redirection_type_shuffling_test/00: RuntimeError, Pass
 dart/redirection_type_shuffling_test/none: RuntimeError
 dart_2/redirection_type_shuffling_test/00: RuntimeError, Pass
diff --git a/runtime/vm/compiler/backend/typed_data_aot_test.cc b/runtime/vm/compiler/backend/typed_data_aot_test.cc
index fd0870f..b1dd7c0 100644
--- a/runtime/vm/compiler/backend/typed_data_aot_test.cc
+++ b/runtime/vm/compiler/backend/typed_data_aot_test.cc
@@ -45,20 +45,36 @@
   LoadIndexedInstr* load_indexed = nullptr;
 
   ILMatcher cursor(flow_graph, entry);
-  RELEASE_ASSERT(cursor.TryMatch({
-      kMoveGlob,
-      {kMatchAndMoveCheckNull, &check_null},
-      {kMatchAndMoveLoadField, &load_field},
-      kMoveGlob,
-      kMatchAndMoveBranchTrue,
-      kMoveGlob,
-      {kMatchAndMoveGenericCheckBound, &bounds_check},
-      {kMatchAndMoveLoadUntagged, &load_untagged},
-      kMoveParallelMoves,
-      {kMatchAndMoveLoadIndexed, &load_indexed},
-      kMoveGlob,
-      kMatchReturn,
-  }));
+  if (Isolate::Current()->null_safety()) {
+    RELEASE_ASSERT(cursor.TryMatch({
+        kMoveGlob,
+        {kMatchAndMoveLoadField, &load_field},
+        kMoveGlob,
+        kMatchAndMoveBranchTrue,
+        kMoveGlob,
+        {kMatchAndMoveGenericCheckBound, &bounds_check},
+        {kMatchAndMoveLoadUntagged, &load_untagged},
+        kMoveParallelMoves,
+        {kMatchAndMoveLoadIndexed, &load_indexed},
+        kMoveGlob,
+        kMatchReturn,
+    }));
+  } else {
+    RELEASE_ASSERT(cursor.TryMatch({
+        kMoveGlob,
+        {kMatchAndMoveCheckNull, &check_null},
+        {kMatchAndMoveLoadField, &load_field},
+        kMoveGlob,
+        kMatchAndMoveBranchTrue,
+        kMoveGlob,
+        {kMatchAndMoveGenericCheckBound, &bounds_check},
+        {kMatchAndMoveLoadUntagged, &load_untagged},
+        kMoveParallelMoves,
+        {kMatchAndMoveLoadIndexed, &load_indexed},
+        kMoveGlob,
+        kMatchReturn,
+    }));
+  }
 
   EXPECT(load_field->InputAt(0)->definition()->IsParameter());
   EXPECT(bounds_check->InputAt(0)->definition() == load_field);
@@ -141,51 +157,6 @@
       }
       )";
 
-  std::initializer_list<MatchCode> expected_il = {
-      // Before loop
-      kMoveGlob,
-      kMatchAndMoveCheckNull,
-      kMatchAndMoveLoadField,
-      kMoveGlob,
-      kMatchAndMoveBranchTrue,
-
-      // Loop
-      kMoveGlob,
-      // Load 1
-      kMatchAndMoveGenericCheckBound,
-      kMoveGlob,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveLoadIndexed,
-      kMoveGlob,
-      // Load 2
-      kMatchAndMoveGenericCheckBound,
-      kMoveGlob,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveLoadIndexed,
-      kMoveGlob,
-      // Store 1
-      kMatchAndMoveGenericCheckBound,
-      kMoveGlob,
-      kMoveParallelMoves,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveStoreIndexed,
-      kMoveGlob,
-      // Store 2
-      kMoveParallelMoves,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveStoreIndexed,
-      kMoveGlob,
-
-      // Exit the loop.
-      kMatchAndMoveBranchFalse,
-      kMoveGlob,
-      kMatchReturn,
-  };
-
   char script_buffer[1024];
   char uri_buffer[1024];
   char function_name[1024];
@@ -209,7 +180,96 @@
 
     // Ensure the IL matches what we expect.
     ILMatcher cursor(flow_graph, entry);
-    EXPECT(cursor.TryMatch(expected_il));
+    if (Isolate::Current()->null_safety()) {
+      EXPECT(cursor.TryMatch({
+          // Before loop
+          kMoveGlob,
+          kMatchAndMoveLoadField,
+          kMoveGlob,
+          kMatchAndMoveBranchTrue,
+
+          // Loop
+          kMoveGlob,
+          // Load 1
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadIndexed,
+          kMoveGlob,
+          // Load 2
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadIndexed,
+          kMoveGlob,
+          // Store 1
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+          kMoveGlob,
+          // Store 2
+          kMoveParallelMoves,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+          kMoveGlob,
+
+          // Exit the loop.
+          kMatchAndMoveBranchFalse,
+          kMoveGlob,
+          kMatchReturn,
+      }));
+    } else {
+      EXPECT(cursor.TryMatch({
+          // Before loop
+          kMoveGlob,
+          kMatchAndMoveCheckNull,
+          kMatchAndMoveLoadField,
+          kMoveGlob,
+          kMatchAndMoveBranchTrue,
+
+          // Loop
+          kMoveGlob,
+          // Load 1
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadIndexed,
+          kMoveGlob,
+          // Load 2
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadIndexed,
+          kMoveGlob,
+          // Store 1
+          kMatchAndMoveGenericCheckBound,
+          kMoveGlob,
+          kMoveParallelMoves,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+          kMoveGlob,
+          // Store 2
+          kMoveParallelMoves,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+          kMoveGlob,
+
+          // Exit the loop.
+          kMatchAndMoveBranchFalse,
+          kMoveGlob,
+          kMatchReturn,
+      }));
+    }
   };
 
   check_il("Uint8List");
@@ -235,40 +295,6 @@
       }
       )";
 
-  std::initializer_list<MatchCode> expected_il = {
-      // Receiver null check
-      kMoveGlob,
-      kMatchAndMoveCheckNull,
-
-      // Index null check
-      kMoveGlob,
-      kMatchAndMoveCheckNull,
-
-      // Value null check
-      kMoveGlob,
-      kMatchAndMoveCheckNull,
-
-      // LoadField length
-      kMoveGlob,
-      kMatchAndMoveLoadField,
-
-      // Bounds check
-      kMoveGlob,
-      kMatchAndMoveGenericCheckBound,
-
-      // Store value.
-      kMoveGlob,
-      kMatchAndMoveLoadUntagged,
-      kMoveParallelMoves,
-      kMatchAndMoveOptionalUnbox,
-      kMoveParallelMoves,
-      kMatchAndMoveStoreIndexed,
-
-      // Return
-      kMoveGlob,
-      kMatchReturn,
-  };
-
   char script_buffer[1024];
   char uri_buffer[1024];
   char function_name[1024];
@@ -299,7 +325,63 @@
 
     // Ensure the IL matches what we expect.
     ILMatcher cursor(flow_graph, entry, /*trace=*/true);
-    EXPECT(cursor.TryMatch(expected_il));
+    if (Isolate::Current()->null_safety()) {
+      EXPECT(cursor.TryMatch({
+          // LoadField length
+          kMoveGlob,
+          kMatchAndMoveLoadField,
+
+          // Bounds check
+          kMoveGlob,
+          kMatchAndMoveGenericCheckBound,
+
+          // Store value.
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveOptionalUnbox,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+
+          // Return
+          kMoveGlob,
+          kMatchReturn,
+      }));
+    } else {
+      EXPECT(cursor.TryMatch({
+          // Receiver null check
+          kMoveGlob,
+          kMatchAndMoveCheckNull,
+
+          // Index null check
+          kMoveGlob,
+          kMatchAndMoveCheckNull,
+
+          // Value null check
+          kMoveGlob,
+          kMatchAndMoveCheckNull,
+
+          // LoadField length
+          kMoveGlob,
+          kMatchAndMoveLoadField,
+
+          // Bounds check
+          kMoveGlob,
+          kMatchAndMoveGenericCheckBound,
+
+          // Store value.
+          kMoveGlob,
+          kMatchAndMoveLoadUntagged,
+          kMoveParallelMoves,
+          kMatchAndMoveOptionalUnbox,
+          kMoveParallelMoves,
+          kMatchAndMoveStoreIndexed,
+
+          // Return
+          kMoveGlob,
+          kMatchReturn,
+      }));
+    }
 
     // Compile the graph and attach the code.
     pipeline.CompileGraphAndAttachFunction();
@@ -348,7 +430,11 @@
       TypedData::Handle(TypedData::New(kTypedDataInt8ArrayCid, 16));
   const auto& int_value = Integer::Handle(Integer::New(42));
   const auto& float_value = Double::Handle(Double::New(4.2));
-  for (intptr_t stage = 0; stage <= kLastStage; ++stage) {
+  // With null safety nulls cannot be passed as non-nullable arguments, so
+  // skip all error stages and only run the last stage.
+  const intptr_t first_stage =
+      Isolate::Current()->null_safety() ? kLastStage : 0;
+  for (intptr_t stage = first_stage; stage <= kLastStage; ++stage) {
     run_test("Uint8List", "int", int8_list, int_value, stage);
     run_test("Int8List", "int", uint8_list, int_value, stage);
     run_test("Uint8ClampedList", "int", uint8c_list, int_value, stage);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 73cb897..ae9746d 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -5691,6 +5691,7 @@
       type = type_arguments.TypeAt(from_index + i);
       if (!type.IsLegacy() && !type.IsVoidType() && !type.IsDynamicType() &&
           !type.IsNullType()) {
+        set.Release();
         return true;
       }
       // It is not possible for a legacy type to have non-legacy type
diff --git a/runtime/vm/type_testing_stubs_test.cc b/runtime/vm/type_testing_stubs_test.cc
index 57e9459..1094bb4 100644
--- a/runtime/vm/type_testing_stubs_test.cc
+++ b/runtime/vm/type_testing_stubs_test.cc
@@ -444,13 +444,21 @@
 
   const auto& type_dynamic = Type::Handle(Type::DynamicType());
   auto& type_int = Type::Handle(Type::IntType());
-  type_int = type_int.ToNullability(Nullability::kLegacy, Heap::kNew);
+  if (!TestCase::IsNNBD()) {
+    type_int = type_int.ToNullability(Nullability::kLegacy, Heap::kNew);
+  }
   auto& type_string = Type::Handle(Type::StringType());
-  type_string = type_string.ToNullability(Nullability::kLegacy, Heap::kNew);
+  if (!TestCase::IsNNBD()) {
+    type_string = type_string.ToNullability(Nullability::kLegacy, Heap::kNew);
+  }
   auto& type_object = Type::Handle(Type::ObjectType());
-  type_object = type_object.ToNullability(Nullability::kLegacy, Heap::kNew);
+  type_object = type_object.ToNullability(
+      TestCase::IsNNBD() ? Nullability::kNullable : Nullability::kLegacy,
+      Heap::kNew);
   auto& type_a1 = Type::Handle(class_a1.DeclarationType());
-  type_a1 = type_a1.ToNullability(Nullability::kLegacy, Heap::kNew);
+  if (!TestCase::IsNNBD()) {
+    type_a1 = type_a1.ToNullability(Nullability::kLegacy, Heap::kNew);
+  }
   FinalizeAndCanonicalize(class_null, &type_a1);
 
   const auto& tav_null = TypeArguments::Handle(TypeArguments::null());
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 7183dde..2baab41 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -1473,7 +1473,7 @@
             "language",
             "lib",
             "standalone/io",
-            "vm/dart"
+            "vm"
           ]
         },
         {
@@ -1485,7 +1485,7 @@
             "language",
             "lib",
             "standalone/io",
-            "vm/dart"
+            "vm"
           ]
         }
       ]
@@ -1850,7 +1850,7 @@
             "lib",
             "co19",
             "standalone/io",
-            "vm/dart"
+            "vm"
           ]
         },
         {
@@ -1863,7 +1863,7 @@
             "lib",
             "co19",
             "standalone/io",
-            "vm/dart"
+            "vm"
           ]
         }
       ]