| 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 196e2357c5e18ce48a0360d414ea7bd4ae5ba40b..82fdaf986699589205b47fa2dd14f6fda0f6c946 100644
|
| --- a/test/unittests/wasm/function-body-decoder-unittest.cc
|
| +++ b/test/unittests/wasm/function-body-decoder-unittest.cc
|
| @@ -671,7 +671,7 @@ TEST_F(FunctionBodyDecoderTest, Block3_continue) {
|
| }
|
|
|
| TEST_F(FunctionBodyDecoderTest, NestedBlock_return) {
|
| - EXPECT_VERIFIES(i_i, B1(B1(WASM_RETURN1(WASM_ZERO))));
|
| + EXPECT_VERIFIES(i_i, B1(B1(WASM_RETURN1(WASM_ZERO))), WASM_ZERO);
|
| }
|
|
|
| TEST_F(FunctionBodyDecoderTest, BlockBrBinop) {
|
| @@ -861,13 +861,18 @@ TEST_F(FunctionBodyDecoderTest, Loop2_break) {
|
| EXPECT_VERIFIES(v_i, WASM_LOOP(WASM_SET_LOCAL(0, WASM_ZERO), WASM_BR(1)));
|
| }
|
|
|
| -TEST_F(FunctionBodyDecoderTest, InfiniteLoop) {
|
| - EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BR(0)));
|
| - EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BRV(1, WASM_ZERO)));
|
| +TEST_F(FunctionBodyDecoderTest, InfiniteLoop1) {
|
| + EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BR(0)), WASM_ZERO);
|
| + EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BR(0)), WASM_ZERO);
|
| + EXPECT_VERIFIES(i_i, WASM_LOOP_I(WASM_BRV(1, WASM_ZERO)));
|
| +}
|
| +
|
| +TEST_F(FunctionBodyDecoderTest, InfiniteLoop2) {
|
| + EXPECT_FAILURE(i_i, WASM_LOOP(WASM_BR(0), WASM_ZERO), WASM_ZERO);
|
| }
|
|
|
| TEST_F(FunctionBodyDecoderTest, Loop2_unreachable) {
|
| - EXPECT_VERIFIES(i_i, WASM_LOOP(WASM_BR(0), WASM_NOP));
|
| + EXPECT_VERIFIES(i_i, WASM_LOOP_I(WASM_BR(0), WASM_NOP));
|
| }
|
|
|
| TEST_F(FunctionBodyDecoderTest, LoopType) {
|
| @@ -926,25 +931,45 @@ TEST_F(FunctionBodyDecoderTest, ReturnVoid3) {
|
| }
|
|
|
| TEST_F(FunctionBodyDecoderTest, Unreachable1) {
|
| - EXPECT_VERIFIES(v_v, kExprUnreachable);
|
| - EXPECT_VERIFIES(v_v, kExprUnreachable, kExprUnreachable);
|
| - EXPECT_VERIFIES(v_v, B2(WASM_UNREACHABLE, WASM_ZERO));
|
| - EXPECT_VERIFIES(v_v, B2(WASM_BR(0), WASM_ZERO));
|
| - EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_UNREACHABLE, WASM_ZERO));
|
| - EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_BR(0), WASM_ZERO));
|
| + EXPECT_VERIFIES(v_v, WASM_UNREACHABLE);
|
| + EXPECT_VERIFIES(v_v, WASM_UNREACHABLE, WASM_UNREACHABLE);
|
| + EXPECT_VERIFIES(i_i, WASM_UNREACHABLE, WASM_ZERO);
|
| +}
|
| +
|
| +TEST_F(FunctionBodyDecoderTest, Unreachable2) {
|
| + EXPECT_FAILURE(v_v, B2(WASM_UNREACHABLE, WASM_ZERO));
|
| + EXPECT_FAILURE(v_v, B2(WASM_BR(0), WASM_ZERO));
|
| }
|
|
|
| -TEST_F(FunctionBodyDecoderTest, Unreachable_binop) {
|
| +TEST_F(FunctionBodyDecoderTest, UnreachableLoop1) {
|
| + EXPECT_FAILURE(v_v, WASM_LOOP(WASM_UNREACHABLE, WASM_ZERO));
|
| + EXPECT_FAILURE(v_v, WASM_LOOP(WASM_BR(0), WASM_ZERO));
|
| + EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_UNREACHABLE, WASM_NOP));
|
| + EXPECT_VERIFIES(v_v, WASM_LOOP(WASM_BR(0), WASM_NOP));
|
| +}
|
| +
|
| +TEST_F(FunctionBodyDecoderTest, Unreachable_binop1) {
|
| EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_ZERO, WASM_UNREACHABLE));
|
| EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_UNREACHABLE, WASM_ZERO));
|
| }
|
|
|
| -TEST_F(FunctionBodyDecoderTest, Unreachable_select) {
|
| +TEST_F(FunctionBodyDecoderTest, Unreachable_binop2) {
|
| + EXPECT_VERIFIES(i_i, WASM_I32_AND(WASM_F32(0.0), WASM_UNREACHABLE));
|
| + EXPECT_FAILURE(i_i, WASM_I32_AND(WASM_UNREACHABLE, WASM_F32(0.0)));
|
| +}
|
| +
|
| +TEST_F(FunctionBodyDecoderTest, Unreachable_select1) {
|
| EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_UNREACHABLE, WASM_ZERO, WASM_ZERO));
|
| EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_UNREACHABLE, WASM_ZERO));
|
| EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_ZERO, WASM_ZERO, WASM_UNREACHABLE));
|
| }
|
|
|
| +TEST_F(FunctionBodyDecoderTest, Unreachable_select2) {
|
| + EXPECT_VERIFIES(i_i, WASM_SELECT(WASM_F32(0.0), WASM_UNREACHABLE, WASM_ZERO));
|
| + EXPECT_FAILURE(i_i, WASM_SELECT(WASM_UNREACHABLE, WASM_F32(0.0), WASM_ZERO));
|
| + EXPECT_FAILURE(i_i, WASM_SELECT(WASM_UNREACHABLE, WASM_ZERO, WASM_F32(0.0)));
|
| +}
|
| +
|
| TEST_F(FunctionBodyDecoderTest, If1) {
|
| EXPECT_VERIFIES(
|
| i_i, WASM_IF_ELSE_I(WASM_GET_LOCAL(0), WASM_I32V_1(9), WASM_I32V_1(8)));
|
| @@ -2133,9 +2158,20 @@ TEST_F(FunctionBodyDecoderTest, BrTable_invalid_br2) {
|
| }
|
| }
|
|
|
| +TEST_F(FunctionBodyDecoderTest, BrUnreachable1) {
|
| + EXPECT_VERIFIES(v_i, WASM_GET_LOCAL(0), kExprBrTable, 0, BR_TARGET(0));
|
| +}
|
| +
|
| +TEST_F(FunctionBodyDecoderTest, BrUnreachable2) {
|
| + EXPECT_VERIFIES(v_i, WASM_GET_LOCAL(0), kExprBrTable, 0, BR_TARGET(0),
|
| + WASM_NOP);
|
| + EXPECT_FAILURE(v_i, WASM_GET_LOCAL(0), kExprBrTable, 0, BR_TARGET(0),
|
| + WASM_ZERO);
|
| +}
|
| +
|
| TEST_F(FunctionBodyDecoderTest, Brv1) {
|
| EXPECT_VERIFIES(i_i, WASM_BLOCK_I(WASM_BRV(0, WASM_ZERO)));
|
| - EXPECT_VERIFIES(i_i, WASM_BLOCK_I(WASM_LOOP(WASM_BRV(2, WASM_ZERO))));
|
| + EXPECT_VERIFIES(i_i, WASM_BLOCK_I(WASM_LOOP_I(WASM_BRV(2, WASM_ZERO))));
|
| }
|
|
|
| TEST_F(FunctionBodyDecoderTest, Brv1_type) {
|
| @@ -2225,6 +2261,12 @@ TEST_F(FunctionBodyDecoderTest, Throw) {
|
| EXPECT_FAILURE(l_l, WASM_GET_LOCAL(0), kExprThrow, WASM_I64V(0));
|
| }
|
|
|
| +TEST_F(FunctionBodyDecoderTest, ThrowUnreachable) {
|
| + // TODO(titzer): unreachable code after throw should validate.
|
| + // FLAG_wasm_eh_prototype = true;
|
| + // EXPECT_VERIFIES(v_i, WASM_GET_LOCAL(0), kExprThrow, kExprSetLocal, 0);
|
| +}
|
| +
|
| #define WASM_TRY_OP kExprTry, kLocalVoid
|
|
|
| #define WASM_CATCH(local) kExprCatch, static_cast<byte>(local)
|
|
|