v8/test/mjsunit/regress/wasm/regression-648079.js
Andreas Haas 07f93affa7 [wasm] Simd locals are not allowed without --experimental-wasm-simd
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}
2017-09-11 13:09:30 +00:00

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(); });
})();