func sysReserve(v unsafe.Pointer, n uintptr) unsafe.Pointer {
        // TODO(neelance): maybe unify with mem_plan9.go, depending on how https://github.com/WebAssembly/design/blob/master/FutureFeatures.md#finer-grained-control-over-memory turns out
 
+       if v != nil {
+               // The address space of WebAssembly's linear memory is contiguous,
+               // so requesting specific addresses is not supported. We could use
+               // a different address, but then mheap.sysAlloc discards the result
+               // right away and we don't reuse chunks passed to sysFree.
+               return nil
+       }
+
        if reserveEnd < lastmoduledatap.end {
                reserveEnd = lastmoduledatap.end
        }
-       if uintptr(v) < reserveEnd {
-               v = unsafe.Pointer(reserveEnd)
-       }
-       reserveEnd = uintptr(v) + n
+       v = unsafe.Pointer(reserveEnd)
+       reserveEnd += n
 
        current := currentMemory()
        needed := int32(reserveEnd/sys.DefaultPhysPageSize + 1)