Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit cda4d45

Browse files
author
Dart CI
committed
Version 2.19.0-325.0.dev
Merge a9915dd into dev
2 parents 1d418b4 + a9915dd commit cda4d45

File tree

8 files changed

+55
-1
lines changed

8 files changed

+55
-1
lines changed

runtime/tests/vm/dart/splay_ephemeron_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
// VMOptions=--verify_after_gc
2828
// VMOptions=--verify_before_gc --verify_after_gc
2929
// VMOptions=--verify_store_buffer
30+
// VMOptions=--verify_after_marking
3031
// VMOptions=--stress_write_barrier_elimination
3132
// VMOptions=--old_gen_heap_size=150
3233

runtime/tests/vm/dart/splay_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
// VMOptions=--verify_after_gc
2626
// VMOptions=--verify_before_gc --verify_after_gc
2727
// VMOptions=--verify_store_buffer
28+
// VMOptions=--verify_after_marking
2829
// VMOptions=--stress_write_barrier_elimination
2930
// VMOptions=--old_gen_heap_size=100
3031
// VMOptions=--mark_when_idle

runtime/tests/vm/dart_2/splay_ephemeron_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
// VMOptions=--verify_after_gc
3232
// VMOptions=--verify_before_gc --verify_after_gc
3333
// VMOptions=--verify_store_buffer
34+
// VMOptions=--verify_after_marking
3435
// VMOptions=--stress_write_barrier_elimination
3536
// VMOptions=--old_gen_heap_size=150
3637

runtime/tests/vm/dart_2/splay_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
// VMOptions=--verify_after_gc
3030
// VMOptions=--verify_before_gc --verify_after_gc
3131
// VMOptions=--verify_store_buffer
32+
// VMOptions=--verify_after_marking
3233
// VMOptions=--stress_write_barrier_elimination
3334
// VMOptions=--old_gen_heap_size=100
3435
// VMOptions=--mark_when_idle

runtime/vm/flag_list.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ constexpr bool FLAG_support_il_printer = false;
241241
"Enables heap verification before GC.") \
242242
R(verify_store_buffer, false, bool, false, \
243243
"Enables store buffer verification before and after scavenges.") \
244+
R(verify_after_marking, false, bool, false, \
245+
"Enables heap verification after marking.") \
244246
P(enable_slow_path_sharing, bool, true, "Enable sharing of slow-path code.") \
245247
P(shared_slow_path_triggers_gc, bool, false, \
246248
"TESTING: slow-path triggers a GC.") \

runtime/vm/heap/heap.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,7 @@ class Heap {
390390
friend class ProgramReloadContext; // VisitObjects
391391
friend class ClassFinalizer; // VisitObjects
392392
friend class HeapIterationScope; // VisitObjects
393+
friend class GCMarker; // VisitObjects
393394
friend class ProgramVisitor; // VisitObjectsImagePages
394395
friend class Serializer; // VisitObjectsImagePages
395396
friend class HeapTestHelper;

runtime/vm/heap/marker.cc

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,43 @@ void GCMarker::IncrementalMarkWithTimeBudget(PageSpace* page_space,
988988
}
989989
}
990990

991+
class VerifyAfterMarkingVisitor : public ObjectVisitor,
992+
public ObjectPointerVisitor {
993+
public:
994+
VerifyAfterMarkingVisitor()
995+
: ObjectVisitor(), ObjectPointerVisitor(IsolateGroup::Current()) {}
996+
997+
void VisitObject(ObjectPtr obj) {
998+
if (obj->IsNewObject() || obj->untag()->IsMarked()) {
999+
obj->untag()->VisitPointers(this);
1000+
}
1001+
}
1002+
1003+
void VisitPointers(ObjectPtr* from, ObjectPtr* to) {
1004+
for (ObjectPtr* ptr = from; ptr <= to; ptr++) {
1005+
ObjectPtr obj = *ptr;
1006+
if (obj->IsHeapObject() && obj->IsOldObject() &&
1007+
!obj->untag()->IsMarked()) {
1008+
FATAL("Not marked: *0x%" Px " = 0x%" Px "\n",
1009+
reinterpret_cast<uword>(ptr), static_cast<uword>(obj));
1010+
}
1011+
}
1012+
}
1013+
1014+
void VisitCompressedPointers(uword heap_base,
1015+
CompressedObjectPtr* from,
1016+
CompressedObjectPtr* to) {
1017+
for (ObjectPtr* ptr = from; ptr <= to; ptr++) {
1018+
ObjectPtr obj = ptr->Decompress(heap_base);
1019+
if (obj->IsHeapObject() && obj->IsOldObject() &&
1020+
!obj->untag()->IsMarked()) {
1021+
FATAL("Not marked: *0x%" Px " = 0x%" Px "\n",
1022+
reinterpret_cast<uword>(ptr), static_cast<uword>(obj));
1023+
}
1024+
}
1025+
}
1026+
};
1027+
9911028
void GCMarker::MarkObjects(PageSpace* page_space) {
9921029
if (isolate_group_->marking_stack() != NULL) {
9931030
isolate_group_->DisableIncrementalBarrier();
@@ -1073,6 +1110,16 @@ void GCMarker::MarkObjects(PageSpace* page_space) {
10731110
ASSERT(global_list_.IsEmpty());
10741111
}
10751112
}
1113+
1114+
// Separate from verify_after_gc because that verification interferes with
1115+
// concurrent marking.
1116+
if (FLAG_verify_after_marking) {
1117+
OS::PrintErr("Verifying after marking...");
1118+
VerifyAfterMarkingVisitor visitor;
1119+
heap_->VisitObjects(&visitor);
1120+
OS::PrintErr(" done.\n");
1121+
}
1122+
10761123
Epilogue();
10771124
}
10781125

tools/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ CHANNEL dev
2727
MAJOR 2
2828
MINOR 19
2929
PATCH 0
30-
PRERELEASE 324
30+
PRERELEASE 325
3131
PRERELEASE_PATCH 0

0 commit comments

Comments
 (0)