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>
72 lines
2.2 KiB
JavaScript
72 lines
2.2 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");
|
|
|
|
const builder = new WasmModuleBuilder();
|
|
let struct_type = builder.addStruct([makeField(kWasmStructRef, false)]);
|
|
let struct_type2 =
|
|
builder.addStruct([makeField(wasmRefType(kWasmStructRef), false)]);
|
|
let field_index = 0;
|
|
|
|
builder.addFunction('cast_i31', kSig_v_v)
|
|
.exportFunc()
|
|
.addBody([
|
|
kExprRefNull, struct_type,
|
|
kGCPrefix, kExprStructGet, struct_type, field_index,
|
|
kGCPrefix, kExprRefCastNull, kI31RefCode,
|
|
kExprDrop,
|
|
]);
|
|
|
|
builder.addFunction('cast_i31_nn', kSig_v_v)
|
|
.exportFunc()
|
|
.addBody([
|
|
kExprRefNull, struct_type2,
|
|
kGCPrefix, kExprStructGet, struct_type2, field_index,
|
|
kGCPrefix, kExprRefCast, kI31RefCode,
|
|
kExprDrop,
|
|
]);
|
|
|
|
builder.addFunction('cast_eq', kSig_v_v)
|
|
.exportFunc()
|
|
.addBody([
|
|
kExprRefNull, struct_type,
|
|
kGCPrefix, kExprStructGet, struct_type, field_index,
|
|
kGCPrefix, kExprRefCastNull, kEqRefCode,
|
|
kExprDrop,
|
|
]);
|
|
|
|
builder.addFunction('test_i31', kSig_v_v)
|
|
.exportFunc()
|
|
.addBody([
|
|
kExprRefNull, struct_type,
|
|
kGCPrefix, kExprStructGet, struct_type, field_index,
|
|
kGCPrefix, kExprRefTestNull, kI31RefCode,
|
|
kExprDrop,
|
|
]);
|
|
|
|
builder.addFunction('test_eq', kSig_v_v)
|
|
.exportFunc()
|
|
.addBody([
|
|
kExprRefNull, struct_type,
|
|
kGCPrefix, kExprStructGet, struct_type, field_index,
|
|
kGCPrefix, kExprRefTestNull, kEqRefCode,
|
|
kExprDrop,
|
|
]);
|
|
|
|
const instance = builder.instantiate();
|
|
|
|
assertThrows(() => instance.exports.cast_i31(), WebAssembly.RuntimeError,
|
|
'dereferencing a null pointer');
|
|
assertThrows(() => instance.exports.cast_i31_nn(), WebAssembly.RuntimeError,
|
|
'dereferencing a null pointer');
|
|
assertThrows(() => instance.exports.cast_eq(), WebAssembly.RuntimeError,
|
|
'dereferencing a null pointer');
|
|
assertThrows(() => instance.exports.test_i31(), WebAssembly.RuntimeError,
|
|
'dereferencing a null pointer');
|
|
assertThrows(() => instance.exports.test_eq(), WebAssembly.RuntimeError,
|
|
'dereferencing a null pointer');
|