nodejs/deps/v8/test/mjsunit/regress/wasm/regress-326904344.js

78 lines
2.2 KiB
JavaScript
Raw Permalink Normal View History

// Copyright 2024 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: --allow-natives-syntax
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
const builder = new WasmModuleBuilder();
let sig0 = builder.addType(makeSig([], [kWasmI32]));
let type1 = builder.addArray(kWasmI16, true, kNoSuperType, true);
let type2 = builder.addStruct([makeField(kWasmF32, false), makeField(wasmRefType(kWasmI31Ref), false), makeField(kWasmF32, false)], kNoSuperType, false);
builder.addMemory(16, 32);
builder.addPassiveDataSegment([111, 128, 250, 156]);
builder.addDeclarativeElementSegment([0]);
let $i = 0;
let $j = 1;
builder.addFunction("main", sig0).exportFunc()
.addLocals(kWasmI32, 2)
.addBody([
kExprI32Const, 1,
kExprLocalSet, $i,
kExprLoop, kWasmI32,
kExprRefFunc, 0,
kExprCallRef, sig0,
kExprDrop,
...wasmF32Const(0),
kExprBlock, kWasmI32,
kExprI32Const, 1,
kExprLocalSet, $j,
kExprLoop, kWasmI32,
kExprRefNull, kArrayRefCode,
kGCPrefix, kExprRefCastNull, type1,
kExprRefIsNull,
kExprI32Const, 0,
kExprI32StoreMem, 1, 0,
kExprLocalGet, $j,
kExprI32Const, 1,
kExprI32Sub,
kExprLocalTee, $j,
kExprIf, kWasmVoid,
kExprRefNull, type1,
kExprI32Const, 0, // array index
kExprI32Const, 0, // data offset
kExprI32Const, 1, // length
kGCPrefix, kExprArrayInitData, type1, 0, // segment index
kExprBr, 1,
kExprEnd,
kExprI32Const, 1,
kExprEnd,
kExprEnd,
kGCPrefix, kExprRefI31,
...wasmF32Const(0),
kGCPrefix, kExprStructNew, type2,
kGCPrefix, kExprRefCastNull, type1, // array
kExprI32Const, 1, // offset
kExprI32Const, 2, // value
kExprI32Const, 1, // length
kGCPrefix, kExprArrayFill, type1,
kExprLocalGet, $i,
kExprI32Const, 1,
kExprI32Sub,
kExprLocalTee, $i,
kExprIf, kWasmVoid,
kExprBr, 1,
kExprEnd,
kExprI32Const, 1,
kExprEnd,
]);
const instance = builder.instantiate();
assertThrows(() => instance.exports.main(), RangeError,
"Maximum call stack size exceeded");
%WasmTierUpFunction(instance.exports.main);