70 lines
3.0 KiB
JavaScript
70 lines
3.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.
|
||
|
|
||
|
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
|
||
|
|
||
|
const builder = new WasmModuleBuilder();
|
||
|
builder.addStruct([makeField(wasmRefNullType(kWasmI31Ref), false)]);
|
||
|
builder.addStruct([makeField(kWasmF32, false), makeField(kWasmF64, true), makeField(kWasmF64, true)]);
|
||
|
builder.addStruct([makeField(wasmRefNullType(kWasmNullFuncRef), false)]);
|
||
|
builder.addStruct([]);
|
||
|
builder.startRecGroup();
|
||
|
builder.addArray(kWasmI32, true);
|
||
|
builder.addArray(kWasmI32, true);
|
||
|
builder.addArray(kWasmI32, true);
|
||
|
builder.addType(makeSig([kWasmI32, kWasmI32, kWasmI32], [kWasmI32]));
|
||
|
builder.endRecGroup();
|
||
|
builder.addMemory(16, 32);
|
||
|
// Generate function 1 (out of 2).
|
||
|
builder.addFunction(undefined, 7 /* sig */)
|
||
|
.addLocals(wasmRefType(5), 1).addLocals(wasmRefType(kWasmAnyRef), 1).addLocals(wasmRefNullType(3), 1)
|
||
|
.addBodyWithEnd([
|
||
|
// signature: i_iii
|
||
|
// body:
|
||
|
kExprI64Const, 0x81, 0xee, 0xb8, 0x06, // i64.const
|
||
|
kExprI64Eqz, // i64.eqz
|
||
|
kExprBlock, 0x7f, // block @16 i32
|
||
|
kExprRefNull, 0x00, // ref.null
|
||
|
kGCPrefix, kExprExternConvertAny, // extern.convert_any
|
||
|
kGCPrefix, kExprAnyConvertExtern, // any.convert_extern
|
||
|
kGCPrefix, kExprRefCastNull, 0x06, // ref.cast null
|
||
|
kExprRefAsNonNull, // ref.as_non_null
|
||
|
kExprF32Const, 0x6d, 0x6c, 0x72, 0x9c, // f32.const
|
||
|
kExprF32Const, 0x3b, 0x17, 0x86, 0x92, // f32.const
|
||
|
kExprF32Lt, // f32.lt
|
||
|
kExprI32Const, 0xef, 0xc2, 0x95, 0xcb, 0x05, // i32.const
|
||
|
kExprI32Const, 0xe4, 0xfd, 0x8a, 0xb7, 0x7c, // i32.const
|
||
|
kGCPrefix, kExprArrayFill, 0x06, // array.fill
|
||
|
kExprBlock, 0x7f, // block @54 i32
|
||
|
kExprBlock, 0x7f, // block @56 i32
|
||
|
kExprBlock, 0x7f, // block @58 i32
|
||
|
kExprBlock, 0x7f, // block @60 i32
|
||
|
kExprBlock, 0x7f, // block @62 i32
|
||
|
kExprBlock, 0x7f, // block @64 i32
|
||
|
kExprBlock, 0x7f, // block @66 i32
|
||
|
kExprI32Const, 0x87, 0xe5, 0x99, 0xef, 0x04, // i32.const
|
||
|
kExprI32Const, 0xe1, 0xf4, 0x88, 0xc3, 0x79, // i32.const
|
||
|
kExprBrTable, 0x01, 0x00, 0x00, // br_table entries=1
|
||
|
kExprEnd, // end @84
|
||
|
kExprEnd, // end @85
|
||
|
kExprEnd, // end @86
|
||
|
kExprEnd, // end @87
|
||
|
kExprEnd, // end @88
|
||
|
kExprEnd, // end @89
|
||
|
kExprEnd, // end @90
|
||
|
kExprEnd, // end @91
|
||
|
kExprI32Const, 0xdc, 0xdc, 0xef, 0x8f, 0x07, // i32.const
|
||
|
kAtomicPrefix, kExprI32AtomicXor8U, 0x00, 0xba, 0x4d, // i32.atomic.rmw8.xor_u
|
||
|
kExprI64Const, 0xc3, 0xe4, 0x93, 0x06, // i64.const
|
||
|
kExprI64Eqz, // i64.eqz
|
||
|
kAtomicPrefix, kExprI32AtomicXor8U, 0x00, 0xba, 0x1d, // i32.atomic.rmw8.xor_u
|
||
|
kGCPrefix, kExprArrayNewFixed, 0x05, 0x02, // array.new_fixed
|
||
|
kExprLocalSet, 0x03, // local.set
|
||
|
kExprI32Const, 0xd4, 0xb1, 0xab, 0x98, 0x7a, // i32.const
|
||
|
kExprEnd, // end @298
|
||
|
]);
|
||
|
builder.addExport('main', 0);
|
||
|
const instance = builder.instantiate();
|
||
|
assertTraps(kTrapNullDereference, () => instance.exports.main(1, 2, 3));
|