[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"
]
}
]