nodejs/deps/v8/test/mjsunit/regress/wasm/regress-14167.js
Michaël Zasso 09a8440b45
deps: update V8 to 12.2.281.27
PR-URL: https://github.com/nodejs/node/pull/51362
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
2024-03-31 15:36:07 +02:00

141 lines
4.0 KiB
JavaScript

// Copyright 2023 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: --no-liftoff
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
let builder = new WasmModuleBuilder();
builder.startRecGroup();
// 0
builder.addType(makeSig([wasmRefNullType(0)], [kWasmArrayRef]));
// 1
builder.addStruct([
makeField(kWasmI32, false),
makeField(wasmRefNullType(1), false),
makeField(wasmRefType(0), true)
]);
// 2
builder.addType(makeSig([], [wasmRefNullType(2)]), kNoSuperType, false);
// 3
builder.addStruct([]);
// 4
builder.addStruct([
makeField(kWasmExternRef, false),
makeField(kWasmArrayRef, false),
makeField(kWasmI16, false),
makeField(wasmRefNullType(2), false),
makeField(wasmRefType(5), false),
makeField(wasmRefType(kWasmFuncRef), true)
]);
// 5
builder.addType(makeSig([kWasmF32], [kWasmAnyRef]));
// 6
builder.addType(makeSig([], []));
// 7
builder.addArray(kWasmAnyRef, true);
// 8
builder.addStruct([
makeField(kWasmF32, true),
makeField(kWasmF64, true),
makeField(wasmRefNullType(8), false),
makeField(kWasmFuncRef, true),
makeField(kWasmI64, false)
]);
// 9
builder.addStruct([
makeField(kWasmI8, false),
makeField(wasmRefNullType(2), false)
]);
// 10
builder.addArray(kWasmF64, false);
// 11
builder.addType(makeSig([], [wasmRefNullType(11)]), 2, false);
// 12
builder.addType(makeSig([], [wasmRefNullType(12)]), 11);
// 13
builder.addStruct([
makeField(wasmRefType(kWasmFuncRef), true),
makeField(kWasmEqRef, false),
makeField(kWasmI64, true),
makeField(wasmRefType(8), true)
]);
// 14
builder.addStruct([
makeField(kWasmExternRef, false),
makeField(kWasmNullRef, false),
makeField(kWasmI16, false),
makeField(wasmRefType(11), false),
makeField(wasmRefType(5), false),
makeField(wasmRefType(kWasmFuncRef), true)
], 4);
// 15
builder.addStruct([]);
// 16
builder.addStruct([
makeField(kWasmF32, false),
makeField(wasmRefType(kWasmFuncRef), false),
makeField(kWasmF32, false),
makeField(kWasmF64, true),
makeField(kWasmStructRef, true)
]);
// 17
builder.addType(makeSig([kWasmI32], [wasmRefNullType(15)]));
// 18
builder.addStruct([
makeField(kWasmI32, true),
makeField(kWasmI64, true),
makeField(kWasmI16, true),
makeField(wasmRefNullType(2), false),
makeField(wasmRefNullType(2), false)
]);
// 19
builder.addStruct([makeField(wasmRefType(0), true)]);
// 20
builder.addArray(kWasmI32, true);
// 21
builder.addArray(kWasmI64, false);
builder.endRecGroup();
builder.addDeclarativeElementSegment([1, 2]);
builder.addFunction("test", kSig_v_v)
.addLocals(wasmRefNullType(20), 1)
.addBody([
kExprLoop, 0x7d, // loop @4 f32
kExprRefFunc, 0x01, // ref.func
kExprRefNull, kNullRefCode, // ref.null
kExprRefAsNonNull, // ref.as_non_null
kExprI64Const, 0x81, 0x80, 0x7e, // i64.const
kExprRefNull, kNullRefCode, // ref.null
kExprRefAsNonNull, // ref.as_non_null
kGCPrefix, kExprStructNew, 0x0d, // struct.new
kGCPrefix, kExprStructGet, 0x0d, 0x03, // struct.get
kGCPrefix, kExprStructGet, 0x08, 0x00, // struct.get
kExprDrop, // drop
kExprI32Const, 0x00, // i32.const
kExprBrIf, 0x00, // br_if depth=0
kExprF32Const, 0x00, 0x00, 0x00, 0x00, // f32.const
kExprEnd, // end @39
kExprI32SConvertF32, // i32.trunc_f32_s
kExprRefNull, kNullRefCode, // ref.null
kExprRefFunc, 0x02, // ref.func
kGCPrefix, kExprStructNew, 0x01, // struct.new
kExprDrop, // drop
kExprI32Const, 0x00, // i32.const
kExprI32Const, 0x07, // i32.const
kGCPrefix, kExprArrayNew, 0x14, // array.new
kExprLocalTee, 0x00, // local.tee
kExprRefAsNonNull, // ref.as_non_null
kGCPrefix, kExprArrayLen, // array.len
kExprDrop, // drop
kExprUnreachable,]) // unreachable
.exportFunc();
builder.addFunction(null, 17).addBody([kExprUnreachable]);
builder.addFunction(null, 0).addBody([kExprUnreachable]);
assertTraps(kTrapNullDereference, () => builder.instantiate().exports.test());