[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>
This commit is contained in:
Alexander Markov
2020-06-03 18:09:39 +00:00
committed by commit-bot@chromium.org
parent 6ab36f85b0
commit 1d14868685
5 changed files with 199 additions and 109 deletions
-5
View File
@@ -386,12 +386,7 @@ dart_2/data_uri*test: Skip # Data uri's not supported by dart2js or the analyzer
[ $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
@@ -45,20 +45,36 @@ ISOLATE_UNIT_TEST_CASE(IRTest_TypedDataAOT_Inlining) {
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 @@ ISOLATE_UNIT_TEST_CASE(IRTest_TypedDataAOT_FunctionalGetSet) {
}
)";
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 @@ ISOLATE_UNIT_TEST_CASE(IRTest_TypedDataAOT_FunctionalGetSet) {
// 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 @@ ISOLATE_UNIT_TEST_CASE(IRTest_TypedDataAOT_FunctionalIndexError) {
}
)";
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 @@ ISOLATE_UNIT_TEST_CASE(IRTest_TypedDataAOT_FunctionalIndexError) {
// 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 @@ ISOLATE_UNIT_TEST_CASE(IRTest_TypedDataAOT_FunctionalIndexError) {
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);
+1
View File
@@ -5691,6 +5691,7 @@ bool Class::RequireLegacyErasureOfConstants(Zone* zone) const {
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
+12 -4
View File
@@ -444,13 +444,21 @@ ISOLATE_UNIT_TEST_CASE(TTS_GenericSubtypeRangeCheck) {
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());
+4 -4
View File
@@ -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"
]
}
]