Index: src/heap/heap-inl.h |
diff --git a/src/heap/heap-inl.h b/src/heap/heap-inl.h |
index 8863777e8f557eb3c3023210f7ba311337169d46..e658224aca11190003676d9bbd2df945e1c88508 100644 |
--- a/src/heap/heap-inl.h |
+++ b/src/heap/heap-inl.h |
@@ -15,6 +15,7 @@ |
#include "src/heap-profiler.h" |
#include "src/isolate.h" |
#include "src/list-inl.h" |
+#include "src/msan.h" |
#include "src/objects.h" |
namespace v8 { |
@@ -495,7 +496,7 @@ void Heap::ScavengePointer(HeapObject** p) { ScavengeObject(p, *p); } |
AllocationMemento* Heap::FindAllocationMemento(HeapObject* object) { |
// Check if there is potentially a memento behind the object. If |
- // the last word of the momento is on another page we return |
+ // the last word of the memento is on another page we return |
// immediately. |
Address object_address = object->address(); |
Address memento_address = object_address + object->Size(); |
@@ -505,7 +506,12 @@ AllocationMemento* Heap::FindAllocationMemento(HeapObject* object) { |
} |
HeapObject* candidate = HeapObject::FromAddress(memento_address); |
- if (candidate->map() != allocation_memento_map()) return NULL; |
+ Map* candidate_map = candidate->map(); |
+ // This fast check may peek at an uninitialized word. However, the slow check |
+ // below (memento_address == top) ensures that this is safe. Mark the word as |
+ // initialized to silence MemorySanitizer warnings. |
+ MSAN_MEMORY_IS_INITIALIZED(&candidate_map, sizeof(candidate_map)); |
+ if (candidate_map != allocation_memento_map()) return NULL; |
// Either the object is the last object in the new space, or there is another |
// object of at least word size (the header map word) following it, so |