summaryrefslogtreecommitdiff
path: root/deps/v8/test/unittests/wasm/ast-decoder-unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/unittests/wasm/ast-decoder-unittest.cc')
-rw-r--r--deps/v8/test/unittests/wasm/ast-decoder-unittest.cc102
1 files changed, 71 insertions, 31 deletions
diff --git a/deps/v8/test/unittests/wasm/ast-decoder-unittest.cc b/deps/v8/test/unittests/wasm/ast-decoder-unittest.cc
index cbaf6201c6..e630ac4721 100644
--- a/deps/v8/test/unittests/wasm/ast-decoder-unittest.cc
+++ b/deps/v8/test/unittests/wasm/ast-decoder-unittest.cc
@@ -11,6 +11,7 @@
#include "src/objects.h"
#include "src/wasm/ast-decoder.h"
+#include "src/wasm/signature-map.h"
#include "src/wasm/wasm-macro-gen.h"
#include "src/wasm/wasm-module.h"
#include "src/wasm/wasm-opcodes.h"
@@ -1149,7 +1150,7 @@ TEST_F(AstDecoderTest, AllSimpleExpressions) {
}
TEST_F(AstDecoderTest, MemorySize) {
- byte code[] = {kExprMemorySize};
+ byte code[] = {kExprMemorySize, 0};
EXPECT_VERIFIES_C(i_i, code);
EXPECT_FAILURE_C(f_ff, code);
}
@@ -1183,7 +1184,7 @@ TEST_F(AstDecoderTest, LoadMemAlignment) {
{kExprF64LoadMem, 3}, // --
};
- for (int i = 0; i < arraysize(values); i++) {
+ for (size_t i = 0; i < arraysize(values); i++) {
for (byte alignment = 0; alignment <= 4; alignment++) {
byte code[] = {WASM_ZERO, static_cast<byte>(values[i].instruction),
alignment, ZERO_OFFSET, WASM_DROP};
@@ -1283,7 +1284,7 @@ class TestModuleEnv : public ModuleEnv {
module = &mod;
}
byte AddGlobal(LocalType type, bool mutability = true) {
- mod.globals.push_back({type, mutability, NO_INIT, 0, false, false});
+ mod.globals.push_back({type, mutability, WasmInitExpr(), 0, false, false});
CHECK(mod.globals.size() <= 127);
return static_cast<byte>(mod.globals.size() - 1);
}
@@ -1311,6 +1312,11 @@ class TestModuleEnv : public ModuleEnv {
return result;
}
+ void InitializeFunctionTable() {
+ mod.function_tables.push_back(
+ {0, 0, true, std::vector<int32_t>(), false, false, SignatureMap()});
+ }
+
private:
WasmModule mod;
};
@@ -1421,6 +1427,7 @@ TEST_F(AstDecoderTest, MultiReturnType) {
TEST_F(AstDecoderTest, SimpleIndirectCalls) {
FunctionSig* sig = sigs.i_i();
TestModuleEnv module_env;
+ module_env.InitializeFunctionTable();
module = &module_env;
byte f0 = module_env.AddSignature(sigs.i_v());
@@ -1436,6 +1443,7 @@ TEST_F(AstDecoderTest, SimpleIndirectCalls) {
TEST_F(AstDecoderTest, IndirectCallsOutOfBounds) {
FunctionSig* sig = sigs.i_i();
TestModuleEnv module_env;
+ module_env.InitializeFunctionTable();
module = &module_env;
EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(0, WASM_ZERO));
@@ -1452,6 +1460,7 @@ TEST_F(AstDecoderTest, IndirectCallsOutOfBounds) {
TEST_F(AstDecoderTest, IndirectCallsWithMismatchedSigs3) {
FunctionSig* sig = sigs.i_i();
TestModuleEnv module_env;
+ module_env.InitializeFunctionTable();
module = &module_env;
byte f0 = module_env.AddFunction(sigs.i_f());
@@ -1471,6 +1480,21 @@ TEST_F(AstDecoderTest, IndirectCallsWithMismatchedSigs3) {
EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_F32(17.6)));
}
+TEST_F(AstDecoderTest, IndirectCallsWithoutTableCrash) {
+ FunctionSig* sig = sigs.i_i();
+ TestModuleEnv module_env;
+ module = &module_env;
+
+ byte f0 = module_env.AddSignature(sigs.i_v());
+ byte f1 = module_env.AddSignature(sigs.i_i());
+ byte f2 = module_env.AddSignature(sigs.i_ii());
+
+ EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT0(f0, WASM_ZERO));
+ EXPECT_FAILURE_S(sig, WASM_CALL_INDIRECT1(f1, WASM_ZERO, WASM_I8(22)));
+ EXPECT_FAILURE_S(
+ sig, WASM_CALL_INDIRECT2(f2, WASM_ZERO, WASM_I8(32), WASM_I8(72)));
+}
+
TEST_F(AstDecoderTest, SimpleImportCalls) {
FunctionSig* sig = sigs.i_i();
TestModuleEnv module_env;
@@ -1632,7 +1656,7 @@ TEST_F(AstDecoderTest, WasmGrowMemory) {
module = &module_env;
module->origin = kWasmOrigin;
- byte code[] = {WASM_UNOP(kExprGrowMemory, WASM_GET_LOCAL(0))};
+ byte code[] = {WASM_GET_LOCAL(0), kExprGrowMemory, 0};
EXPECT_VERIFIES_C(i_i, code);
EXPECT_FAILURE_C(i_d, code);
}
@@ -1642,7 +1666,7 @@ TEST_F(AstDecoderTest, AsmJsGrowMemory) {
module = &module_env;
module->origin = kAsmJsOrigin;
- byte code[] = {WASM_UNOP(kExprGrowMemory, WASM_GET_LOCAL(0))};
+ byte code[] = {WASM_GET_LOCAL(0), kExprGrowMemory, 0};
EXPECT_FAILURE_C(i_i, code);
}
@@ -1673,7 +1697,7 @@ TEST_F(AstDecoderTest, AsmJsBinOpsCheckOrigin) {
TestModuleEnv module_env;
module = &module_env;
module->origin = kAsmJsOrigin;
- for (int i = 0; i < arraysize(AsmJsBinOps); i++) {
+ for (size_t i = 0; i < arraysize(AsmJsBinOps); i++) {
TestBinop(AsmJsBinOps[i].op, AsmJsBinOps[i].sig);
}
}
@@ -1682,7 +1706,7 @@ TEST_F(AstDecoderTest, AsmJsBinOpsCheckOrigin) {
TestModuleEnv module_env;
module = &module_env;
module->origin = kWasmOrigin;
- for (int i = 0; i < arraysize(AsmJsBinOps); i++) {
+ for (size_t i = 0; i < arraysize(AsmJsBinOps); i++) {
byte code[] = {
WASM_BINOP(AsmJsBinOps[i].op, WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))};
EXPECT_FAILURE_SC(AsmJsBinOps[i].sig, code);
@@ -1721,7 +1745,7 @@ TEST_F(AstDecoderTest, AsmJsUnOpsCheckOrigin) {
TestModuleEnv module_env;
module = &module_env;
module->origin = kAsmJsOrigin;
- for (int i = 0; i < arraysize(AsmJsUnOps); i++) {
+ for (size_t i = 0; i < arraysize(AsmJsUnOps); i++) {
TestUnop(AsmJsUnOps[i].op, AsmJsUnOps[i].sig);
}
}
@@ -1730,7 +1754,7 @@ TEST_F(AstDecoderTest, AsmJsUnOpsCheckOrigin) {
TestModuleEnv module_env;
module = &module_env;
module->origin = kWasmOrigin;
- for (int i = 0; i < arraysize(AsmJsUnOps); i++) {
+ for (size_t i = 0; i < arraysize(AsmJsUnOps); i++) {
byte code[] = {WASM_UNOP(AsmJsUnOps[i].op, WASM_GET_LOCAL(0))};
EXPECT_FAILURE_SC(AsmJsUnOps[i].sig, code);
}
@@ -2222,7 +2246,7 @@ class BranchTableIteratorTest : public TestWithZone {
Decoder decoder(start, end);
BranchTableOperand operand(&decoder, start);
BranchTableIterator iterator(&decoder, operand);
- EXPECT_EQ(end - start - 1, iterator.length());
+ EXPECT_EQ(end - start - 1u, iterator.length());
EXPECT_TRUE(decoder.ok());
}
void CheckBrTableError(const byte* start, const byte* end) {
@@ -2280,16 +2304,18 @@ class WasmOpcodeLengthTest : public TestWithZone {
WasmOpcodeLengthTest() : TestWithZone() {}
};
-#define EXPECT_LENGTH(expected, opcode) \
- { \
- static const byte code[] = {opcode, 0, 0, 0, 0, 0, 0, 0, 0}; \
- EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \
+#define EXPECT_LENGTH(expected, opcode) \
+ { \
+ static const byte code[] = {opcode, 0, 0, 0, 0, 0, 0, 0, 0}; \
+ EXPECT_EQ(static_cast<unsigned>(expected), \
+ OpcodeLength(code, code + sizeof(code))); \
}
-#define EXPECT_LENGTH_N(expected, ...) \
- { \
- static const byte code[] = {__VA_ARGS__}; \
- EXPECT_EQ(expected, OpcodeLength(code, code + sizeof(code))); \
+#define EXPECT_LENGTH_N(expected, ...) \
+ { \
+ static const byte code[] = {__VA_ARGS__}; \
+ EXPECT_EQ(static_cast<unsigned>(expected), \
+ OpcodeLength(code, code + sizeof(code))); \
}
TEST_F(WasmOpcodeLengthTest, Statements) {
@@ -2316,7 +2342,7 @@ TEST_F(WasmOpcodeLengthTest, MiscExpressions) {
EXPECT_LENGTH(2, kExprGetGlobal);
EXPECT_LENGTH(2, kExprSetGlobal);
EXPECT_LENGTH(2, kExprCallFunction);
- EXPECT_LENGTH(2, kExprCallIndirect);
+ EXPECT_LENGTH(3, kExprCallIndirect);
}
TEST_F(WasmOpcodeLengthTest, I32Const) {
@@ -2375,8 +2401,8 @@ TEST_F(WasmOpcodeLengthTest, LoadsAndStores) {
}
TEST_F(WasmOpcodeLengthTest, MiscMemExpressions) {
- EXPECT_LENGTH(1, kExprMemorySize);
- EXPECT_LENGTH(1, kExprGrowMemory);
+ EXPECT_LENGTH(2, kExprMemorySize);
+ EXPECT_LENGTH(2, kExprGrowMemory);
}
TEST_F(WasmOpcodeLengthTest, SimpleExpressions) {
@@ -2500,6 +2526,19 @@ TEST_F(WasmOpcodeLengthTest, SimpleExpressions) {
EXPECT_LENGTH(1, kExprI64ReinterpretF64);
}
+TEST_F(WasmOpcodeLengthTest, SimdExpressions) {
+#define TEST_SIMD(name, opcode, sig) \
+ EXPECT_LENGTH_N(2, kSimdPrefix, static_cast<byte>(kExpr##name & 0xff));
+ FOREACH_SIMD_0_OPERAND_OPCODE(TEST_SIMD)
+#undef TEST_SIMD
+#define TEST_SIMD(name, opcode, sig) \
+ EXPECT_LENGTH_N(3, kSimdPrefix, static_cast<byte>(kExpr##name & 0xff));
+ FOREACH_SIMD_1_OPERAND_OPCODE(TEST_SIMD)
+#undef TEST_SIMD
+ // test for bad simd opcode
+ EXPECT_LENGTH_N(2, kSimdPrefix, 0xff);
+}
+
typedef ZoneVector<LocalType> LocalTypeMap;
class LocalDeclDecoderTest : public TestWithZone {
@@ -2534,7 +2573,7 @@ TEST_F(LocalDeclDecoderTest, NoLocals) {
AstLocalDecls decls(zone());
bool result = DecodeLocalDecls(decls, data, data + sizeof(data));
EXPECT_TRUE(result);
- EXPECT_EQ(0, decls.total_local_count);
+ EXPECT_EQ(0u, decls.total_local_count);
}
TEST_F(LocalDeclDecoderTest, OneLocal) {
@@ -2545,10 +2584,10 @@ TEST_F(LocalDeclDecoderTest, OneLocal) {
AstLocalDecls decls(zone());
bool result = DecodeLocalDecls(decls, data, data + sizeof(data));
EXPECT_TRUE(result);
- EXPECT_EQ(1, decls.total_local_count);
+ EXPECT_EQ(1u, decls.total_local_count);
LocalTypeMap map = Expand(decls);
- EXPECT_EQ(1, map.size());
+ EXPECT_EQ(1u, map.size());
EXPECT_EQ(type, map[0]);
}
}
@@ -2562,10 +2601,10 @@ TEST_F(LocalDeclDecoderTest, FiveLocals) {
bool result = DecodeLocalDecls(decls, data, data + sizeof(data));
EXPECT_TRUE(result);
EXPECT_EQ(sizeof(data), decls.decls_encoded_size);
- EXPECT_EQ(5, decls.total_local_count);
+ EXPECT_EQ(5u, decls.total_local_count);
LocalTypeMap map = Expand(decls);
- EXPECT_EQ(5, map.size());
+ EXPECT_EQ(5u, map.size());
ExpectRun(map, 0, type, 5);
}
}
@@ -2581,10 +2620,11 @@ TEST_F(LocalDeclDecoderTest, MixedLocals) {
bool result = DecodeLocalDecls(decls, data, data + sizeof(data));
EXPECT_TRUE(result);
EXPECT_EQ(sizeof(data), decls.decls_encoded_size);
- EXPECT_EQ(a + b + c + d, decls.total_local_count);
+ EXPECT_EQ(static_cast<uint32_t>(a + b + c + d),
+ decls.total_local_count);
LocalTypeMap map = Expand(decls);
- EXPECT_EQ(a + b + c + d, map.size());
+ EXPECT_EQ(static_cast<uint32_t>(a + b + c + d), map.size());
size_t pos = 0;
pos = ExpectRun(map, pos, kAstI32, a);
@@ -2610,7 +2650,7 @@ TEST_F(LocalDeclDecoderTest, UseEncoder) {
AstLocalDecls decls(zone());
bool result = DecodeLocalDecls(decls, data, end);
EXPECT_TRUE(result);
- EXPECT_EQ(5 + 1337 + 212, decls.total_local_count);
+ EXPECT_EQ(5u + 1337u + 212u, decls.total_local_count);
LocalTypeMap map = Expand(decls);
size_t pos = 0;
@@ -2662,8 +2702,8 @@ TEST_F(BytecodeIteratorTest, WithAstDecls) {
AstLocalDecls decls(zone());
BytecodeIterator iter(code, code + sizeof(code), &decls);
- EXPECT_EQ(3, decls.decls_encoded_size);
- EXPECT_EQ(3, iter.pc_offset());
+ EXPECT_EQ(3u, decls.decls_encoded_size);
+ EXPECT_EQ(3u, iter.pc_offset());
EXPECT_TRUE(iter.has_next());
EXPECT_EQ(kExprI8Const, iter.current());
iter.next();