Index: test/unittests/wasm/function-body-decoder-unittest.cc |
diff --git a/test/unittests/wasm/function-body-decoder-unittest.cc b/test/unittests/wasm/function-body-decoder-unittest.cc |
index 0da781451efde4736ecbbcbdf9153190d051e670..66bbaa75807a103dc2e7d2f4932e5457ba5c01ee 100644 |
--- a/test/unittests/wasm/function-body-decoder-unittest.cc |
+++ b/test/unittests/wasm/function-body-decoder-unittest.cc |
@@ -104,11 +104,29 @@ class FunctionBodyDecoderTest : public TestWithZone { |
local_decls.AddLocals(count, type); |
} |
+ void PrepareBytecode(const byte** startp, const byte** endp) { |
+ const byte* start = *startp; |
+ const byte* end = *endp; |
+ size_t locals_size = local_decls.Size(); |
+ size_t total_size = end - start + locals_size + 1; |
+ byte* buffer = static_cast<byte*>(zone()->New(total_size)); |
+ // Prepend the local decls to the code. |
+ local_decls.Emit(buffer); |
+ // Emit the code. |
+ memcpy(buffer + locals_size, start, end - start); |
+ // Append an extra end opcode. |
+ buffer[total_size - 1] = kExprEnd; |
+ |
+ *startp = buffer; |
+ *endp = buffer + total_size; |
+ } |
+ |
// Prepends local variable declarations and renders nice error messages for |
// verification failures. |
void Verify(ErrorCode expected, FunctionSig* sig, const byte* start, |
const byte* end) { |
- local_decls.Prepend(zone(), &start, &end); |
+ PrepareBytecode(&start, &end); |
+ |
// Verify the code. |
DecodeResult result = VerifyWasmCode( |
zone()->allocator(), module == nullptr ? nullptr : module->module, sig, |
@@ -461,11 +479,7 @@ TEST_F(FunctionBodyDecoderTest, Block0Block0) { |
} |
TEST_F(FunctionBodyDecoderTest, Block0_end) { |
- EXPECT_VERIFIES(v_v, WASM_EMPTY_BLOCK, kExprEnd); |
-} |
- |
-TEST_F(FunctionBodyDecoderTest, Block0_end_end) { |
- EXPECT_FAILURE(v_v, WASM_EMPTY_BLOCK, kExprEnd, kExprEnd); |
+ EXPECT_FAILURE(v_v, WASM_EMPTY_BLOCK, kExprEnd); |
} |
TEST_F(FunctionBodyDecoderTest, Block1) { |
@@ -712,37 +726,18 @@ TEST_F(FunctionBodyDecoderTest, Block_else) { |
TEST_F(FunctionBodyDecoderTest, IfNop) { |
EXPECT_VERIFIES(v_i, WASM_IF(WASM_GET_LOCAL(0), WASM_NOP)); |
-} |
- |
-TEST_F(FunctionBodyDecoderTest, IfNopElseNop) { |
EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_NOP)); |
} |
-TEST_F(FunctionBodyDecoderTest, If_end_end) { |
- static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP, kExprEnd, kExprEnd}; |
- EXPECT_VERIFIES_C(v_i, code); |
-} |
- |
-TEST_F(FunctionBodyDecoderTest, If_end_end_end) { |
- static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP, |
- kExprEnd, kExprEnd, kExprEnd}; |
- EXPECT_FAILURE_C(v_i, code); |
+TEST_F(FunctionBodyDecoderTest, If_end) { |
+ EXPECT_VERIFIES(v_i, kExprGetLocal, 0, WASM_IF_OP, kExprEnd); |
+ EXPECT_FAILURE(v_i, kExprGetLocal, 0, WASM_IF_OP, kExprEnd, kExprEnd); |
} |
TEST_F(FunctionBodyDecoderTest, If_falloff1) { |
- static const byte code[] = {kExprGetLocal, 0, kExprIf}; |
- EXPECT_FAILURE_C(v_i, code); |
-} |
- |
-TEST_F(FunctionBodyDecoderTest, If_falloff2) { |
- static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP}; |
- EXPECT_FAILURE_C(v_i, code); |
-} |
- |
-TEST_F(FunctionBodyDecoderTest, IfElse_falloff) { |
- static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP, kExprNop, |
- kExprElse}; |
- EXPECT_FAILURE_C(v_i, code); |
+ EXPECT_FAILURE(v_i, kExprGetLocal, 0, kExprIf); |
+ EXPECT_FAILURE(v_i, kExprGetLocal, 0, WASM_IF_OP); |
+ EXPECT_FAILURE(v_i, kExprGetLocal, 0, WASM_IF_OP, kExprNop, kExprElse); |
} |
TEST_F(FunctionBodyDecoderTest, IfElseNop) { |