Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: test/unittests/wasm/function-body-decoder-unittest.cc

Issue 2636463002: Revert of [wasm] Enforce that function bodies end with the \"end\" opcode. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "test/unittests/test-utils.h" 5 #include "test/unittests/test-utils.h"
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "test/common/wasm/test-signatures.h" 9 #include "test/common/wasm/test-signatures.h"
10 10
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 } 97 }
98 98
99 TestSignatures sigs; 99 TestSignatures sigs;
100 ModuleEnv* module; 100 ModuleEnv* module;
101 LocalDeclEncoder local_decls; 101 LocalDeclEncoder local_decls;
102 102
103 void AddLocals(ValueType type, uint32_t count) { 103 void AddLocals(ValueType type, uint32_t count) {
104 local_decls.AddLocals(count, type); 104 local_decls.AddLocals(count, type);
105 } 105 }
106 106
107 void PrepareBytecode(const byte** startp, const byte** endp) {
108 const byte* start = *startp;
109 const byte* end = *endp;
110 size_t locals_size = local_decls.Size();
111 size_t total_size = end - start + locals_size + 1;
112 byte* buffer = static_cast<byte*>(zone()->New(total_size));
113 // Prepend the local decls to the code.
114 local_decls.Emit(buffer);
115 // Emit the code.
116 memcpy(buffer + locals_size, start, end - start);
117 // Append an extra end opcode.
118 buffer[total_size - 1] = kExprEnd;
119
120 *startp = buffer;
121 *endp = buffer + total_size;
122 }
123
124 // Prepends local variable declarations and renders nice error messages for 107 // Prepends local variable declarations and renders nice error messages for
125 // verification failures. 108 // verification failures.
126 void Verify(ErrorCode expected, FunctionSig* sig, const byte* start, 109 void Verify(ErrorCode expected, FunctionSig* sig, const byte* start,
127 const byte* end) { 110 const byte* end) {
128 PrepareBytecode(&start, &end); 111 local_decls.Prepend(zone(), &start, &end);
129
130 // Verify the code. 112 // Verify the code.
131 DecodeResult result = VerifyWasmCode( 113 DecodeResult result = VerifyWasmCode(
132 zone()->allocator(), module == nullptr ? nullptr : module->module, sig, 114 zone()->allocator(), module == nullptr ? nullptr : module->module, sig,
133 start, end); 115 start, end);
134 116
135 if (result.error_code != expected) { 117 if (result.error_code != expected) {
136 ptrdiff_t pc = result.error_pc - result.start; 118 ptrdiff_t pc = result.error_pc - result.start;
137 ptrdiff_t pt = result.error_pt - result.start; 119 ptrdiff_t pt = result.error_pt - result.start;
138 std::ostringstream str; 120 std::ostringstream str;
139 if (expected == kSuccess) { 121 if (expected == kSuccess) {
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 EXPECT_FAILURE_C(i_i, code); 454 EXPECT_FAILURE_C(i_i, code);
473 } 455 }
474 456
475 TEST_F(FunctionBodyDecoderTest, Block0Block0) { 457 TEST_F(FunctionBodyDecoderTest, Block0Block0) {
476 static const byte code[] = {WASM_EMPTY_BLOCK, WASM_EMPTY_BLOCK}; 458 static const byte code[] = {WASM_EMPTY_BLOCK, WASM_EMPTY_BLOCK};
477 EXPECT_VERIFIES_C(v_v, code); 459 EXPECT_VERIFIES_C(v_v, code);
478 EXPECT_FAILURE_C(i_i, code); 460 EXPECT_FAILURE_C(i_i, code);
479 } 461 }
480 462
481 TEST_F(FunctionBodyDecoderTest, Block0_end) { 463 TEST_F(FunctionBodyDecoderTest, Block0_end) {
482 EXPECT_FAILURE(v_v, WASM_EMPTY_BLOCK, kExprEnd); 464 EXPECT_VERIFIES(v_v, WASM_EMPTY_BLOCK, kExprEnd);
465 }
466
467 TEST_F(FunctionBodyDecoderTest, Block0_end_end) {
468 EXPECT_FAILURE(v_v, WASM_EMPTY_BLOCK, kExprEnd, kExprEnd);
483 } 469 }
484 470
485 TEST_F(FunctionBodyDecoderTest, Block1) { 471 TEST_F(FunctionBodyDecoderTest, Block1) {
486 byte code[] = {WASM_BLOCK_I(WASM_GET_LOCAL(0))}; 472 byte code[] = {WASM_BLOCK_I(WASM_GET_LOCAL(0))};
487 EXPECT_VERIFIES_C(i_i, code); 473 EXPECT_VERIFIES_C(i_i, code);
488 EXPECT_FAILURE_C(v_i, code); 474 EXPECT_FAILURE_C(v_i, code);
489 EXPECT_FAILURE_C(d_dd, code); 475 EXPECT_FAILURE_C(d_dd, code);
490 EXPECT_FAILURE_C(i_f, code); 476 EXPECT_FAILURE_C(i_f, code);
491 EXPECT_FAILURE_C(i_d, code); 477 EXPECT_FAILURE_C(i_d, code);
492 } 478 }
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 } 711 }
726 712
727 TEST_F(FunctionBodyDecoderTest, IfNop) { 713 TEST_F(FunctionBodyDecoderTest, IfNop) {
728 EXPECT_VERIFIES(v_i, WASM_IF(WASM_GET_LOCAL(0), WASM_NOP)); 714 EXPECT_VERIFIES(v_i, WASM_IF(WASM_GET_LOCAL(0), WASM_NOP));
729 } 715 }
730 716
731 TEST_F(FunctionBodyDecoderTest, IfNopElseNop) { 717 TEST_F(FunctionBodyDecoderTest, IfNopElseNop) {
732 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_NOP)); 718 EXPECT_VERIFIES(v_i, WASM_IF_ELSE(WASM_GET_LOCAL(0), WASM_NOP, WASM_NOP));
733 } 719 }
734 720
735 TEST_F(FunctionBodyDecoderTest, If_end) {
736 static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP, kExprEnd};
737 EXPECT_VERIFIES_C(v_i, code);
738 }
739
740 TEST_F(FunctionBodyDecoderTest, If_end_end) { 721 TEST_F(FunctionBodyDecoderTest, If_end_end) {
741 static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP, kExprEnd, kExprEnd}; 722 static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP, kExprEnd, kExprEnd};
723 EXPECT_VERIFIES_C(v_i, code);
724 }
725
726 TEST_F(FunctionBodyDecoderTest, If_end_end_end) {
727 static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP,
728 kExprEnd, kExprEnd, kExprEnd};
742 EXPECT_FAILURE_C(v_i, code); 729 EXPECT_FAILURE_C(v_i, code);
743 } 730 }
744 731
745 TEST_F(FunctionBodyDecoderTest, If_falloff1) { 732 TEST_F(FunctionBodyDecoderTest, If_falloff1) {
746 static const byte code[] = {kExprGetLocal, 0, kExprIf}; 733 static const byte code[] = {kExprGetLocal, 0, kExprIf};
747 EXPECT_FAILURE_C(v_i, code); 734 EXPECT_FAILURE_C(v_i, code);
748 } 735 }
749 736
750 TEST_F(FunctionBodyDecoderTest, If_falloff2) { 737 TEST_F(FunctionBodyDecoderTest, If_falloff2) {
751 static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP}; 738 static const byte code[] = {kExprGetLocal, 0, WASM_IF_OP};
(...skipping 1989 matching lines...) Expand 10 before | Expand all | Expand 10 after
2741 iter.next(); 2728 iter.next();
2742 EXPECT_TRUE(iter.has_next()); 2729 EXPECT_TRUE(iter.has_next());
2743 EXPECT_EQ(kExprI32Const, iter.current()); 2730 EXPECT_EQ(kExprI32Const, iter.current());
2744 iter.next(); 2731 iter.next();
2745 EXPECT_FALSE(iter.has_next()); 2732 EXPECT_FALSE(iter.has_next());
2746 } 2733 }
2747 2734
2748 } // namespace wasm 2735 } // namespace wasm
2749 } // namespace internal 2736 } // namespace internal
2750 } // namespace v8 2737 } // namespace v8
OLDNEW
« no previous file with comments | « test/unittests/value-serializer-unittest.cc ('k') | test/unittests/wasm/module-decoder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698