c1c93e8246
Although we currently only support up to 1GB memory, we want to raise this issue in the future. This test illustrates several issues we need to be sure to fix first. Bug: v8:6306 Change-Id: I362b7a9e51e8eb33a50e3b172a6f01d41995c3cb Reviewed-on: https://chromium-review.googlesource.com/487047 Commit-Queue: Brad Nelson <bradnelson@chromium.org> Reviewed-by: Brad Nelson <bradnelson@chromium.org> Cr-Commit-Position: refs/heads/master@{#44876}
77 lines
2.0 KiB
JavaScript
77 lines
2.0 KiB
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --wasm-max-mem-pages=49152
|
|
|
|
// This test makes sure things don't break once we support >2GB wasm memories.
|
|
load("test/mjsunit/wasm/wasm-constants.js");
|
|
load("test/mjsunit/wasm/wasm-module-builder.js");
|
|
|
|
function testHugeMemory() {
|
|
var builder = new WasmModuleBuilder();
|
|
|
|
const num_pages = 49152; // 3GB
|
|
|
|
builder.addMemory(num_pages, num_pages, true);
|
|
builder.addFunction("geti", kSig_i_ii)
|
|
.addBody([
|
|
kExprGetLocal, 0,
|
|
kExprGetLocal, 1,
|
|
kExprI32Mul,
|
|
kExprI32LoadMem, 0, 0,
|
|
])
|
|
.exportFunc();
|
|
|
|
var module = builder.instantiate();
|
|
const geti = module.exports.geti;
|
|
|
|
print("In bounds");
|
|
assertEquals(0, geti(2500, 1 << 20));
|
|
print("Out of bounds");
|
|
assertTraps(kTrapMemOutOfBounds, () => geti(3500, 1 << 20));
|
|
}
|
|
testHugeMemory();
|
|
|
|
function testHugeMemoryConstInBounds() {
|
|
var builder = new WasmModuleBuilder();
|
|
|
|
const num_pages = 49152; // 3GB
|
|
|
|
builder.addMemory(num_pages, num_pages, true);
|
|
builder.addFunction("geti", kSig_i_v)
|
|
.addBody([
|
|
kExprI32Const, 0x80, 0x80, 0x80, 0x80, 0x7A, // 0xA0000000, 2.5GB
|
|
kExprI32LoadMem, 0, 0,
|
|
])
|
|
.exportFunc();
|
|
|
|
var module = builder.instantiate();
|
|
const geti = module.exports.geti;
|
|
|
|
print("In bounds");
|
|
assertEquals(0, geti());
|
|
}
|
|
testHugeMemoryConstInBounds();
|
|
|
|
function testHugeMemoryConstOutOfBounds() {
|
|
var builder = new WasmModuleBuilder();
|
|
|
|
const num_pages = 49152; // 3GB
|
|
|
|
builder.addMemory(num_pages, num_pages, true);
|
|
builder.addFunction("geti", kSig_i_v)
|
|
.addBody([
|
|
kExprI32Const, 0x80, 0x80, 0x80, 0x80, 0x7E, // 0xE0000000, 3.5GB
|
|
kExprI32LoadMem, 0, 0,
|
|
])
|
|
.exportFunc();
|
|
|
|
var module = builder.instantiate();
|
|
const geti = module.exports.geti;
|
|
|
|
print("Out of bounds");
|
|
assertTraps(kTrapMemOutOfBounds, geti);
|
|
}
|
|
testHugeMemoryConstOutOfBounds();
|