memory-init.js (1259B)
1 // |jit-test| heavy; allow-oom; skip-if: !canRunHugeMemoryTests() 2 3 var S = (function () { 4 let s = ""; 5 for ( let i=0; i < 16; i++ ) 6 s += "0123456789abcdef" 7 return s; 8 })(); 9 10 for (let shared of ['', 'shared']) { 11 try { 12 var ins = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(` 13 (module 14 (memory (export "mem") i64 65537 65537 ${shared}) 15 (data $d "${S}") 16 (func (export "f") (param $p i64) (param $o i32) (param $n i32) 17 (memory.init $d (local.get $p) (local.get $o) (local.get $n))))`))); 18 } catch (e) { 19 if (e instanceof WebAssembly.RuntimeError && String(e).match(/too many memory pages/)) { 20 quit(0); 21 } 22 throw e; 23 } 24 25 var mem = new Uint8Array(ins.exports.mem.buffer); 26 27 // Init above 4GB 28 doit(mem, 0x1_0000_1000, 1, S.length-1); 29 30 // Init above 4GB with OOM 31 assertErrorMessage(() => ins.exports.f(0x1_0000_ff80n, 0, 256), 32 WebAssembly.RuntimeError, 33 /out of bounds/); 34 35 // Init across 4GB 36 doit(mem, 0xffff_ff80, 3, 200); 37 } 38 39 function doit(mem, addr, offs, n) { 40 ins.exports.f(BigInt(addr), offs, n); 41 for (let i=0; i < n; i++) { 42 assertEq(mem[addr+i], S.charCodeAt(offs+i)); 43 } 44 }