07f93affa7
The wasm valiation incorrectly allowed simd locals, even without the experimental flag turned on. This was not noted in the generated code because simd opcodes were forbidden, but the interpreter could not handle these locals. R=clemensh@chromium.org Bug: chromium:763697 Change-Id: I11d924ac21e50bce81d0504c2c7b252105a89f80 Reviewed-on: https://chromium-review.googlesource.com/660117 Commit-Queue: Andreas Haas <ahaas@chromium.org> Reviewed-by: Clemens Hammacher <clemensh@chromium.org> Cr-Commit-Position: refs/heads/master@{#47946}
329 lines
17 KiB
JavaScript
329 lines
17 KiB
JavaScript
// Copyright 2016 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: --expose-wasm
|
|
|
|
load("test/mjsunit/wasm/wasm-constants.js");
|
|
load("test/mjsunit/wasm/wasm-module-builder.js");
|
|
|
|
// Non-standard opcodes.
|
|
let kSig_s_v = makeSig([], [kWasmS128]);
|
|
let kExprS128LoadMem = 0xc0;
|
|
|
|
(function() {
|
|
"use asm";
|
|
var builder = new WasmModuleBuilder();
|
|
builder.addFunction("regression_648079", kSig_s_v)
|
|
.addBody([
|
|
// locals:
|
|
0x00,
|
|
// body:
|
|
kExprI64RemU,
|
|
kExprI64Ctz,
|
|
kExprI64LeU,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprI64Ctz,
|
|
kExprI64Ne,
|
|
kExprI64ShrS,
|
|
kExprI64GtS,
|
|
kExprI64RemU,
|
|
kExprUnreachable,
|
|
kExprI64RemU,
|
|
kExprI32Eqz,
|
|
kExprI64LeU,
|
|
kExprDrop,
|
|
kExprF32Add,
|
|
kExprI64Ior,
|
|
kExprF32CopySign,
|
|
kExprI64Ne,
|
|
kExprI64GeS,
|
|
kExprUnreachable,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprUnreachable,
|
|
kExprIf, 10, // @32
|
|
kExprBlock, 00, // @34
|
|
kExprBr, // depth=109
|
|
kExprI64Shl,
|
|
kExprI64LeU,
|
|
kExprI64GeS,
|
|
kExprI64Clz,
|
|
kExprF32Min,
|
|
kExprF32Eq,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprUnreachable,
|
|
kExprI32Const,
|
|
kExprUnreachable,
|
|
kExprBr, // depth=101
|
|
kExprF32Div,
|
|
kExprI64GtU,
|
|
kExprI64GeS,
|
|
kExprI64Clz,
|
|
kExprSelect,
|
|
kExprI64GtS,
|
|
kExprI64RemU,
|
|
kExprI64LeU,
|
|
kExprI64Shl,
|
|
kExprI64Ctz,
|
|
kExprLoop, 01, // @63 i32
|
|
kExprElse, // @65
|
|
kExprI64LeU,
|
|
kExprI64RemU,
|
|
kExprI64Ne,
|
|
kExprI64GeS,
|
|
kExprI32Const,
|
|
kExprI64GtS,
|
|
kExprI64LoadMem32U,
|
|
kExprI64Clz,
|
|
kExprI64Shl,
|
|
kExprI64Ne,
|
|
kExprI64ShrS,
|
|
kExprI64GtS,
|
|
kExprI64DivU,
|
|
kExprI64Ne,
|
|
kExprI64GtS,
|
|
kExprI64Ne,
|
|
kExprI64Popcnt,
|
|
kExprI64DivU,
|
|
kExprI64DivU,
|
|
kExprSelect,
|
|
kExprI64Ctz,
|
|
kExprI64Popcnt,
|
|
kExprI64RemU,
|
|
kExprI64Clz,
|
|
kExprF64Sub,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprI64RemU,
|
|
kExprI64Ctz,
|
|
kExprI64LeU,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprBrIf, // depth=116
|
|
kExprF32Min,
|
|
kExprI64GtU,
|
|
kExprBlock, 01, // @107 i32
|
|
kExprTeeLocal,
|
|
kExprBlock, 01, // @111 i32
|
|
kExprBlock, 01, // @113 i32
|
|
kExprBlock, 01, // @115 i32
|
|
kExprBlock, 01, // @117 i32
|
|
kExprBlock, 01, // @119 i32
|
|
kExprBlock, 01, // @121 i32
|
|
kExprBlock, 01, // @123 i32
|
|
kExprBlock, 88, // @125
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprUnreachable,
|
|
kExprLoop, 40, // @131
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprI32Add,
|
|
kExprBlock, 05, // @136
|
|
kExprUnreachable,
|
|
kExprIf, 02, // @139 i64
|
|
kExprBlock, 01, // @141 i32
|
|
kExprBrIf, // depth=16
|
|
kExprLoop, 00, // @145
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprReturn,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprI64LoadMem16U,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprNop,
|
|
kExprBr, // depth=1
|
|
kExprElse, // @164
|
|
kExprF32Trunc,
|
|
kExprI32Add,
|
|
kExprCallIndirect, // sig #1
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprBlock, 00, // @172
|
|
kExprI64RemU,
|
|
kExprI64Ctz,
|
|
kExprI64LeU,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprDrop,
|
|
kExprI64Popcnt,
|
|
kExprF32Min,
|
|
kExprUnreachable,
|
|
kExprF64Sub,
|
|
kExprI32Const,
|
|
kExprUnreachable,
|
|
kExprGetLocal,
|
|
kExprI64LoadMem32U,
|
|
kExprUnreachable,
|
|
kExprI64RemU,
|
|
kExprI32Eqz,
|
|
kExprI64LeU,
|
|
kExprDrop,
|
|
kExprF32Add,
|
|
kExprI64Ior,
|
|
kExprF32CopySign,
|
|
kExprI64Ne,
|
|
kExprI64GeS,
|
|
kExprUnreachable,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprUnreachable,
|
|
kExprIf, 10, // @216
|
|
kExprBlock, 00, // @218
|
|
kExprBr, // depth=109
|
|
kExprI64Shl,
|
|
kExprI64LeU,
|
|
kExprI64GeS,
|
|
kExprI64Clz,
|
|
kExprF32Min,
|
|
kExprF32Eq,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprUnreachable,
|
|
kExprF64Min,
|
|
kExprI32Const,
|
|
kExprBr, // depth=101
|
|
kExprF32Div,
|
|
kExprI64GtU,
|
|
kExprI64GeS,
|
|
kExprI64Clz,
|
|
kExprI64Popcnt,
|
|
kExprF64Lt,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprUnreachable,
|
|
kExprLoop, 01, // @247 i32
|
|
kExprElse, // @249
|
|
kExprI64LeU,
|
|
kExprI64RemU,
|
|
kExprI64Ne,
|
|
kExprI64GeS,
|
|
kExprI32Const,
|
|
kExprBlock, 01, // @256 i32
|
|
kExprBlock, 01, // @258 i32
|
|
kExprBlock, 01, // @260 i32
|
|
kExprBlock, 01, // @262 i32
|
|
kExprBlock, 01, // @264 i32
|
|
kExprF32Ge,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprUnreachable,
|
|
kExprLoop, 40, // @271
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprI32Add,
|
|
kExprBlock, 01, // @276 i32
|
|
kExprUnreachable,
|
|
kExprIf, 02, // @279 i64
|
|
kExprBlock, 00, // @281
|
|
kExprBrIf, // depth=16
|
|
kExprLoop, 00, // @285
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprReturn,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprI64LoadMem16U,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprNop,
|
|
kExprBr, // depth=1
|
|
kExprElse, // @304
|
|
kExprF32Trunc,
|
|
kExprI32Add,
|
|
kExprCallIndirect, // sig #1
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprBlock, 00, // @312
|
|
kExprI64RemU,
|
|
kExprI64Ctz,
|
|
kExprI64LeU,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprDrop,
|
|
kExprI64Popcnt,
|
|
kExprF32Min,
|
|
kExprUnreachable,
|
|
kExprF64Sub,
|
|
kExprI32Const,
|
|
kExprUnreachable,
|
|
kExprGetLocal,
|
|
kExprI64LoadMem32U,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprNop,
|
|
kExprBr, // depth=1
|
|
kExprElse, // @348
|
|
kExprF32Trunc,
|
|
kExprI32Add,
|
|
kExprCallIndirect, // sig #1
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprBlock, 00, // @356
|
|
kExprI64RemU,
|
|
kExprI64Ctz,
|
|
kExprI64LeU,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprUnreachable,
|
|
kExprDrop,
|
|
kExprI64Popcnt,
|
|
kExprF32Min,
|
|
kExprUnreachable,
|
|
kExprF64Sub,
|
|
kExprI32Const,
|
|
kExprUnreachable,
|
|
kExprGetLocal,
|
|
kExprI64LoadMem32U,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprF32Trunc,
|
|
kExprUnreachable,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
kExprF64Min,
|
|
])
|
|
.exportFunc();
|
|
assertThrows(function() { builder.instantiate(); });
|
|
})();
|