// Copyright 2019 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: --experimental-wasm-compilation-hints load('test/mjsunit/wasm/wasm-module-builder.js'); (function testCompileWithBadLazyHint() { print(arguments.callee.name); let builder = new WasmModuleBuilder(); builder.addFunction('id', kSig_i_i) .addBody([kExprLocalGet, 0]) .setCompilationHint(kCompilationHintStrategyLazy, kCompilationHintTierOptimized, kCompilationHintTierBaseline) .exportFunc(); let bytes = builder.toBuffer(); assertPromiseResult(WebAssembly.compile(bytes) .then(assertUnreachable, error => assertEquals("WebAssembly.compile(): Invalid compilation " + "hint 0x2d (forbidden downgrade) @+49", error.message))); })(); (function testCompileWithBadLazyFunctionBody() { print(arguments.callee.name); let builder = new WasmModuleBuilder(); builder.addFunction('id', kSig_i_l) .addBody([kExprLocalGet, 0]) .setCompilationHint(kCompilationHintStrategyLazy, kCompilationHintTierDefault, kCompilationHintTierDefault) .exportFunc(); let bytes = builder.toBuffer(); assertPromiseResult(WebAssembly.compile(bytes) .then(assertUnreachable, error => assertEquals("WebAssembly.compile(): type error in " + "merge[0] (expected i32, got i64) @+56", error.message))); })(); (function testCompileEmptyModule() { print(arguments.callee.name); let builder = new WasmModuleBuilder(); let bytes = builder.toBuffer(); assertPromiseResult(WebAssembly.compile(bytes)); })(); (function testCompileLazyModule() { print(arguments.callee.name); let builder = new WasmModuleBuilder(); builder.addFunction('id', kSig_i_i) .addBody([kExprLocalGet, 0]) .setCompilationHint(kCompilationHintStrategyLazy, kCompilationHintTierDefault, kCompilationHintTierDefault) .exportFunc(); let bytes = builder.toBuffer(); assertPromiseResult(WebAssembly.instantiate(bytes) .then(({module, instance}) => assertEquals(42, instance.exports.id(42)))); })(); (function testCompileLazyBaselineEagerTopTierModule() { print(arguments.callee.name); let builder = new WasmModuleBuilder(); builder.addFunction('id', kSig_i_i) .addBody([kExprLocalGet, 0]) .setCompilationHint(kCompilationHintStrategyLazyBaselineEagerTopTier, kCompilationHintTierDefault, kCompilationHintTierDefault) .exportFunc(); let bytes = builder.toBuffer(); assertPromiseResult(WebAssembly.instantiate(bytes) .then(({module, instance}) => assertEquals(42, instance.exports.id(42)))); })();