| Index: test/unittests/wasm/ast-decoder-unittest.cc
|
| diff --git a/test/unittests/wasm/ast-decoder-unittest.cc b/test/unittests/wasm/ast-decoder-unittest.cc
|
| index c14af0dd275a52d06fa50acb1870136298eb4106..e491179c8c146e415f09f4f2ec690d28cb0e33b5 100644
|
| --- a/test/unittests/wasm/ast-decoder-unittest.cc
|
| +++ b/test/unittests/wasm/ast-decoder-unittest.cc
|
| @@ -1671,120 +1671,81 @@ TEST_F(AstDecoderTest, ExprBrIf_Unify) {
|
| }
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch0) {
|
| - static byte code[] = {kExprTableSwitch, 0, 0, 0, 0};
|
| +TEST_F(AstDecoderTest, BrTable0) {
|
| + static byte code[] = {kExprBrTable, 0, 0};
|
| EXPECT_FAILURE(&env_v_v, code);
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch0b) {
|
| - static byte code[] = {kExprTableSwitch, 0, 0, 0, 0, kExprI8Const, 11};
|
| +TEST_F(AstDecoderTest, BrTable0b) {
|
| + static byte code[] = {kExprBrTable, 0, 0, kExprI8Const, 11};
|
| EXPECT_FAILURE(&env_v_v, code);
|
| EXPECT_FAILURE(&env_i_i, code);
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch0c) {
|
| - static byte code[] = {
|
| - WASM_BLOCK(1, WASM_TABLESWITCH_OP(0, 1, WASM_CASE_BR(0)), WASM_I8(67))};
|
| - EXPECT_VERIFIES(&env_v_v, code);
|
| +TEST_F(AstDecoderTest, BrTable0c) {
|
| + static byte code[] = {kExprBrTable, 0, 1, 0, 0, kExprI8Const, 11};
|
| + EXPECT_FAILURE(&env_v_v, code);
|
| + EXPECT_FAILURE(&env_i_i, code);
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch0d) {
|
| +TEST_F(AstDecoderTest, BrTable1a) {
|
| static byte code[] = {
|
| - WASM_BLOCK(1, WASM_TABLESWITCH_OP(0, 2, WASM_CASE_BR(0), WASM_CASE_BR(1)),
|
| - WASM_I8(67))};
|
| + WASM_BLOCK(1, WASM_BR_TABLE(WASM_I8(67), 0, BR_TARGET(0)))};
|
| EXPECT_VERIFIES(&env_v_v, code);
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch1) {
|
| - static byte code[] = {WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
|
| - WASM_TABLESWITCH_BODY(WASM_I8(0), WASM_I8(9))};
|
| - EXPECT_VERIFIES(&env_i_i, code);
|
| +TEST_F(AstDecoderTest, BrTable1b) {
|
| + static byte code[] = {
|
| + WASM_BLOCK(1, WASM_BR_TABLE(WASM_ZERO, 0, BR_TARGET(0)))};
|
| EXPECT_VERIFIES(&env_v_v, code);
|
| + EXPECT_FAILURE(&env_i_i, code);
|
| EXPECT_FAILURE(&env_f_ff, code);
|
| EXPECT_FAILURE(&env_d_dd, code);
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch_off_end) {
|
| - static byte code[] = {WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
|
| - WASM_TABLESWITCH_BODY(WASM_I8(0), WASM_I8(9))};
|
| - for (size_t len = arraysize(code) - 1; len > 0; len--) {
|
| - Verify(kError, &env_v_v, code, code + len);
|
| - }
|
| -}
|
| -
|
| -TEST_F(AstDecoderTest, TableSwitch2) {
|
| +TEST_F(AstDecoderTest, BrTable2a) {
|
| static byte code[] = {
|
| - WASM_TABLESWITCH_OP(2, 2, WASM_CASE(0), WASM_CASE(1)),
|
| - WASM_TABLESWITCH_BODY(WASM_I8(3), WASM_I8(10), WASM_I8(11))};
|
| - EXPECT_VERIFIES(&env_i_i, code);
|
| + WASM_BLOCK(1, WASM_BR_TABLE(WASM_I8(67), 1, BR_TARGET(0), BR_TARGET(0)))};
|
| EXPECT_VERIFIES(&env_v_v, code);
|
| - EXPECT_FAILURE(&env_f_ff, code);
|
| - EXPECT_FAILURE(&env_d_dd, code);
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch1b) {
|
| - EXPECT_VERIFIES_INLINE(&env_i_i, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
|
| - WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_ZERO));
|
| -
|
| - EXPECT_VERIFIES_INLINE(&env_f_ff, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
|
| - WASM_TABLESWITCH_BODY(WASM_ZERO, WASM_F32(0.0)));
|
| -
|
| - EXPECT_VERIFIES_INLINE(&env_d_dd, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
|
| - WASM_TABLESWITCH_BODY(WASM_ZERO, WASM_F64(0.0)));
|
| +TEST_F(AstDecoderTest, BrTable2b) {
|
| + static byte code[] = {WASM_BLOCK(
|
| + 1, WASM_BLOCK(
|
| + 1, WASM_BR_TABLE(WASM_I8(67), 1, BR_TARGET(0), BR_TARGET(1))))};
|
| + EXPECT_VERIFIES(&env_v_v, code);
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch_br1) {
|
| - for (int depth = 0; depth < 2; depth++) {
|
| - byte code[] = {WASM_BLOCK(1, WASM_TABLESWITCH_OP(0, 1, WASM_CASE_BR(depth)),
|
| - WASM_GET_LOCAL(0))};
|
| - EXPECT_VERIFIES(&env_v_i, code);
|
| - EXPECT_FAILURE(&env_i_i, code);
|
| +TEST_F(AstDecoderTest, BrTable_off_end) {
|
| + static byte code[] = {
|
| + WASM_BLOCK(1, WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(0)))};
|
| + for (size_t len = 1; len < sizeof(code); len++) {
|
| + Verify(kError, &env_i_i, code, code + len);
|
| }
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch_invalid_br) {
|
| - for (int depth = 1; depth < 4; depth++) {
|
| - EXPECT_FAILURE_INLINE(&env_v_i,
|
| - WASM_TABLESWITCH_OP(0, 1, WASM_CASE_BR(depth)),
|
| - WASM_GET_LOCAL(0));
|
| - EXPECT_FAILURE_INLINE(
|
| - &env_v_i,
|
| - WASM_TABLESWITCH_OP(0, 2, WASM_CASE_BR(depth), WASM_CASE_BR(depth)),
|
| - WASM_GET_LOCAL(0));
|
| +TEST_F(AstDecoderTest, BrTable_invalid_br1) {
|
| + for (int depth = 0; depth < 4; depth++) {
|
| + byte code[] = {
|
| + WASM_BLOCK(1, WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(depth)))};
|
| + if (depth == 0) {
|
| + EXPECT_VERIFIES(&env_v_i, code);
|
| + } else {
|
| + EXPECT_FAILURE(&env_v_i, code);
|
| + }
|
| }
|
| }
|
|
|
| -TEST_F(AstDecoderTest, TableSwitch_invalid_case_ref) {
|
| - EXPECT_FAILURE_INLINE(&env_i_i, WASM_TABLESWITCH_OP(0, 1, WASM_CASE(0)),
|
| - WASM_GET_LOCAL(0));
|
| - EXPECT_FAILURE_INLINE(&env_i_i, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(1)),
|
| - WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_ZERO));
|
| -}
|
| -
|
| -TEST_F(AstDecoderTest, TableSwitch1_br) {
|
| - EXPECT_VERIFIES_INLINE(
|
| - &env_i_i, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)),
|
| - WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_ZERO)));
|
| -}
|
| -
|
| -TEST_F(AstDecoderTest, TableSwitch2_br) {
|
| - EXPECT_VERIFIES_INLINE(
|
| - &env_i_i, WASM_TABLESWITCH_OP(2, 2, WASM_CASE(0), WASM_CASE(1)),
|
| - WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_I8(0)),
|
| - WASM_BRV(0, WASM_I8(1))));
|
| -
|
| - EXPECT_FAILURE_INLINE(
|
| - &env_f_ff, WASM_TABLESWITCH_OP(2, 2, WASM_CASE(0), WASM_CASE(1)),
|
| - WASM_TABLESWITCH_BODY(WASM_ZERO, WASM_BRV(0, WASM_I8(3)),
|
| - WASM_BRV(0, WASM_I8(4))));
|
| -}
|
| -
|
| -TEST_F(AstDecoderTest, TableSwitch2x2) {
|
| - EXPECT_VERIFIES_INLINE(
|
| - &env_i_i, WASM_TABLESWITCH_OP(2, 4, WASM_CASE(0), WASM_CASE(1),
|
| - WASM_CASE(0), WASM_CASE(1)),
|
| - WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_I8(3)),
|
| - WASM_BRV(0, WASM_I8(4))));
|
| +TEST_F(AstDecoderTest, BrTable_invalid_br2) {
|
| + for (int depth = 0; depth < 4; depth++) {
|
| + byte code[] = {
|
| + WASM_LOOP(1, WASM_BR_TABLE(WASM_GET_LOCAL(0), 0, BR_TARGET(depth)))};
|
| + if (depth <= 1) {
|
| + EXPECT_VERIFIES(&env_v_i, code);
|
| + } else {
|
| + EXPECT_FAILURE(&env_v_i, code);
|
| + }
|
| + }
|
| }
|
|
|
| TEST_F(AstDecoderTest, ExprBreakNesting1) {
|
|
|