nodejs/deps/v8/test/mjsunit/regress/wasm/regress-326904344.js
Michaël Zasso cfbf9e0d14 deps: update V8 to 12.4.254.14
PR-URL: https://github.com/nodejs/node/pull/52465
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Michael Dawson <midawson@redhat.com>
2024-04-22 21:25:15 +00:00

78 lines
2.2 KiB
JavaScript

// 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);