| Index: src/wasm/wasm-objects.cc
 | 
| diff --git a/src/wasm/wasm-objects.cc b/src/wasm/wasm-objects.cc
 | 
| index 901e302f7e9324958abe2d2f572b065074f79e53..49e8f50da39141c5bf43de5c559d9d2ec0ae7e39 100644
 | 
| --- a/src/wasm/wasm-objects.cc
 | 
| +++ b/src/wasm/wasm-objects.cc
 | 
| @@ -409,9 +409,12 @@ Handle<WasmMemoryObject> WasmMemoryObject::New(Isolate* isolate,
 | 
|    Handle<JSObject> memory_obj =
 | 
|        isolate->factory()->NewJSObject(memory_ctor, TENURED);
 | 
|    memory_obj->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
 | 
| -  buffer.is_null() ? memory_obj->SetEmbedderField(
 | 
| -                         kArrayBuffer, isolate->heap()->undefined_value())
 | 
| -                   : memory_obj->SetEmbedderField(kArrayBuffer, *buffer);
 | 
| +  if (buffer.is_null()) {
 | 
| +    const bool enable_guard_regions = EnableGuardRegions();
 | 
| +    buffer = SetupArrayBuffer(isolate, nullptr, 0, nullptr, 0, false,
 | 
| +                              enable_guard_regions);
 | 
| +  }
 | 
| +  memory_obj->SetEmbedderField(kArrayBuffer, *buffer);
 | 
|    Handle<Object> max = isolate->factory()->NewNumber(maximum);
 | 
|    memory_obj->SetEmbedderField(kMaximum, *max);
 | 
|    Handle<Symbol> memory_sym(isolate->native_context()->wasm_memory_sym());
 | 
| @@ -419,8 +422,7 @@ Handle<WasmMemoryObject> WasmMemoryObject::New(Isolate* isolate,
 | 
|    return Handle<WasmMemoryObject>::cast(memory_obj);
 | 
|  }
 | 
|  
 | 
| -DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmMemoryObject, buffer, kArrayBuffer,
 | 
| -                              JSArrayBuffer)
 | 
| +DEFINE_OBJ_ACCESSORS(WasmMemoryObject, buffer, kArrayBuffer, JSArrayBuffer)
 | 
|  DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmMemoryObject, instances_link, kInstancesLink,
 | 
|                                WasmInstanceWrapper)
 | 
|  
 | 
| @@ -467,20 +469,15 @@ void WasmMemoryObject::ResetInstancesLink(Isolate* isolate) {
 | 
|  int32_t WasmMemoryObject::Grow(Isolate* isolate,
 | 
|                                 Handle<WasmMemoryObject> memory_object,
 | 
|                                 uint32_t pages) {
 | 
| -  Handle<JSArrayBuffer> old_buffer;
 | 
| +  Handle<JSArrayBuffer> old_buffer(memory_object->buffer());
 | 
|    uint32_t old_size = 0;
 | 
| -  Address old_mem_start = nullptr;
 | 
| -  if (memory_object->has_buffer()) {
 | 
| -    old_buffer = handle(memory_object->buffer());
 | 
| -    old_size = old_buffer->byte_length()->Number();
 | 
| -    old_mem_start = static_cast<Address>(old_buffer->backing_store());
 | 
| -  }
 | 
| +  CHECK(old_buffer->byte_length()->ToUint32(&old_size));
 | 
|    Handle<JSArrayBuffer> new_buffer;
 | 
|    // Return current size if grow by 0.
 | 
|    if (pages == 0) {
 | 
|      // Even for pages == 0, we need to attach a new JSArrayBuffer with the same
 | 
|      // backing store and neuter the old one to be spec compliant.
 | 
| -    if (!old_buffer.is_null() && old_size != 0) {
 | 
| +    if (old_size != 0) {
 | 
|        new_buffer = SetupArrayBuffer(
 | 
|            isolate, old_buffer->allocation_base(),
 | 
|            old_buffer->allocation_length(), old_buffer->backing_store(),
 | 
| @@ -515,6 +512,7 @@ int32_t WasmMemoryObject::Grow(Isolate* isolate,
 | 
|      if (new_buffer.is_null()) return -1;
 | 
|      DCHECK(!instance_wrapper->has_previous());
 | 
|      SetInstanceMemory(isolate, instance, new_buffer);
 | 
| +    Address old_mem_start = static_cast<Address>(old_buffer->backing_store());
 | 
|      UncheckedUpdateInstanceMemory(isolate, instance, old_mem_start, old_size);
 | 
|      while (instance_wrapper->has_next()) {
 | 
|        instance_wrapper = instance_wrapper->next_wrapper();
 | 
| 
 |