| OLD | NEW |
| 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/cctest/wasm/test-signatures.h" | 9 #include "test/cctest/wasm/test-signatures.h" |
| 10 | 10 |
| (...skipping 1649 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1660 EXPECT_VERIFIES(&env, code1); | 1660 EXPECT_VERIFIES(&env, code1); |
| 1661 EXPECT_VERIFIES(&env, code2); | 1661 EXPECT_VERIFIES(&env, code2); |
| 1662 } else { | 1662 } else { |
| 1663 EXPECT_FAILURE(&env, code1); | 1663 EXPECT_FAILURE(&env, code1); |
| 1664 EXPECT_FAILURE(&env, code2); | 1664 EXPECT_FAILURE(&env, code2); |
| 1665 } | 1665 } |
| 1666 } | 1666 } |
| 1667 } | 1667 } |
| 1668 } | 1668 } |
| 1669 | 1669 |
| 1670 TEST_F(AstDecoderTest, TableSwitch0) { | 1670 TEST_F(AstDecoderTest, BrTable0) { |
| 1671 static byte code[] = {kExprTableSwitch, 0, 0, 0, 0}; | 1671 static byte code[] = {kExprBrTable, 0, 0}; |
| 1672 EXPECT_FAILURE(&env_v_v, code); | 1672 EXPECT_FAILURE(&env_v_v, code); |
| 1673 } | 1673 } |
| 1674 | 1674 |
| 1675 TEST_F(AstDecoderTest, TableSwitch0b) { | 1675 TEST_F(AstDecoderTest, BrTable0b) { |
| 1676 static byte code[] = {kExprTableSwitch, 0, 0, 0, 0, kExprI8Const, 11}; | 1676 static byte code[] = {kExprBrTable, 0, 0, kExprI8Const, 11}; |
| 1677 EXPECT_FAILURE(&env_v_v, code); | 1677 EXPECT_FAILURE(&env_v_v, code); |
| 1678 EXPECT_FAILURE(&env_i_i, code); | 1678 EXPECT_FAILURE(&env_i_i, code); |
| 1679 } | 1679 } |
| 1680 | 1680 |
| 1681 TEST_F(AstDecoderTest, TableSwitch0c) { | 1681 TEST_F(AstDecoderTest, BrTable0c) { |
| 1682 static byte code[] = {kExprBrTable, 0, 1, 0, 0, kExprI8Const, 11}; |
| 1683 EXPECT_FAILURE(&env_v_v, code); |
| 1684 EXPECT_FAILURE(&env_i_i, code); |
| 1685 } |
| 1686 |
| 1687 TEST_F(AstDecoderTest, BrTable1a) { |
| 1682 static byte code[] = { | 1688 static byte code[] = { |
| 1683 WASM_BLOCK(1, WASM_TABLESWITCH_OP(0, 1, WASM_CASE_BR(0)), WASM_I8(67))}; | 1689 WASM_BLOCK(1, WASM_BR_TABLE(WASM_I8(67), 1, BR_TARGET(0)))}; |
| 1684 EXPECT_VERIFIES(&env_v_v, code); | 1690 EXPECT_VERIFIES(&env_v_v, code); |
| 1685 } | 1691 } |
| 1686 | 1692 |
| 1687 TEST_F(AstDecoderTest, TableSwitch0d) { | 1693 TEST_F(AstDecoderTest, BrTable1b) { |
| 1688 static byte code[] = { | 1694 static byte code[] = { |
| 1689 WASM_BLOCK(1, WASM_TABLESWITCH_OP(0, 2, WASM_CASE_BR(0), WASM_CASE_BR(1)), | 1695 WASM_BLOCK(1, WASM_BR_TABLE(WASM_ZERO, 1, BR_TARGET(0)))}; |
| 1690 WASM_I8(67))}; | |
| 1691 EXPECT_VERIFIES(&env_v_v, code); | 1696 EXPECT_VERIFIES(&env_v_v, code); |
| 1692 } | 1697 EXPECT_FAILURE(&env_i_i, code); |
| 1693 | |
| 1694 TEST_F(AstDecoderTest, TableSwitch1) { | |
| 1695 static byte code[] = {WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)), | |
| 1696 WASM_TABLESWITCH_BODY(WASM_I8(0), WASM_I8(9))}; | |
| 1697 EXPECT_VERIFIES(&env_i_i, code); | |
| 1698 EXPECT_VERIFIES(&env_v_v, code); | |
| 1699 EXPECT_FAILURE(&env_f_ff, code); | 1698 EXPECT_FAILURE(&env_f_ff, code); |
| 1700 EXPECT_FAILURE(&env_d_dd, code); | 1699 EXPECT_FAILURE(&env_d_dd, code); |
| 1701 } | 1700 } |
| 1702 | 1701 |
| 1703 TEST_F(AstDecoderTest, TableSwitch_off_end) { | 1702 TEST_F(AstDecoderTest, BrTable2a) { |
| 1704 static byte code[] = {WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)), | 1703 static byte code[] = { |
| 1705 WASM_TABLESWITCH_BODY(WASM_I8(0), WASM_I8(9))}; | 1704 WASM_BLOCK(1, WASM_BR_TABLE(WASM_I8(67), 2, BR_TARGET(0), BR_TARGET(0)))}; |
| 1706 for (size_t len = arraysize(code) - 1; len > 0; len--) { | 1705 EXPECT_VERIFIES(&env_v_v, code); |
| 1707 Verify(kError, &env_v_v, code, code + len); | 1706 } |
| 1707 |
| 1708 TEST_F(AstDecoderTest, BrTable2b) { |
| 1709 static byte code[] = {WASM_BLOCK( |
| 1710 1, WASM_BLOCK( |
| 1711 1, WASM_BR_TABLE(WASM_I8(67), 2, BR_TARGET(0), BR_TARGET(1))))}; |
| 1712 EXPECT_VERIFIES(&env_v_v, code); |
| 1713 } |
| 1714 |
| 1715 TEST_F(AstDecoderTest, BrTable_off_end) { |
| 1716 static byte code[] = { |
| 1717 WASM_BLOCK(1, WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(0)))}; |
| 1718 for (size_t len = 1; len < sizeof(code); len++) { |
| 1719 Verify(kError, &env_i_i, code, code + len); |
| 1708 } | 1720 } |
| 1709 } | 1721 } |
| 1710 | 1722 |
| 1711 TEST_F(AstDecoderTest, TableSwitch2) { | 1723 TEST_F(AstDecoderTest, BrTable_invalid_br1) { |
| 1712 static byte code[] = { | 1724 for (int depth = 0; depth < 4; depth++) { |
| 1713 WASM_TABLESWITCH_OP(2, 2, WASM_CASE(0), WASM_CASE(1)), | 1725 byte code[] = { |
| 1714 WASM_TABLESWITCH_BODY(WASM_I8(3), WASM_I8(10), WASM_I8(11))}; | 1726 WASM_BLOCK(1, WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(depth)))}; |
| 1715 EXPECT_VERIFIES(&env_i_i, code); | 1727 if (depth == 0) { |
| 1716 EXPECT_VERIFIES(&env_v_v, code); | 1728 EXPECT_VERIFIES(&env_v_i, code); |
| 1717 EXPECT_FAILURE(&env_f_ff, code); | 1729 } else { |
| 1718 EXPECT_FAILURE(&env_d_dd, code); | 1730 EXPECT_FAILURE(&env_v_i, code); |
| 1719 } | 1731 } |
| 1720 | |
| 1721 TEST_F(AstDecoderTest, TableSwitch1b) { | |
| 1722 EXPECT_VERIFIES_INLINE(&env_i_i, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)), | |
| 1723 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_ZERO)); | |
| 1724 | |
| 1725 EXPECT_VERIFIES_INLINE(&env_f_ff, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)), | |
| 1726 WASM_TABLESWITCH_BODY(WASM_ZERO, WASM_F32(0.0))); | |
| 1727 | |
| 1728 EXPECT_VERIFIES_INLINE(&env_d_dd, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)), | |
| 1729 WASM_TABLESWITCH_BODY(WASM_ZERO, WASM_F64(0.0))); | |
| 1730 } | |
| 1731 | |
| 1732 TEST_F(AstDecoderTest, TableSwitch_br1) { | |
| 1733 for (int depth = 0; depth < 2; depth++) { | |
| 1734 byte code[] = {WASM_BLOCK(1, WASM_TABLESWITCH_OP(0, 1, WASM_CASE_BR(depth)), | |
| 1735 WASM_GET_LOCAL(0))}; | |
| 1736 EXPECT_VERIFIES(&env_v_i, code); | |
| 1737 EXPECT_FAILURE(&env_i_i, code); | |
| 1738 } | 1732 } |
| 1739 } | 1733 } |
| 1740 | 1734 |
| 1741 TEST_F(AstDecoderTest, TableSwitch_invalid_br) { | 1735 TEST_F(AstDecoderTest, BrTable_invalid_br2) { |
| 1742 for (int depth = 1; depth < 4; depth++) { | 1736 for (int depth = 0; depth < 4; depth++) { |
| 1743 EXPECT_FAILURE_INLINE(&env_v_i, | 1737 byte code[] = { |
| 1744 WASM_TABLESWITCH_OP(0, 1, WASM_CASE_BR(depth)), | 1738 WASM_LOOP(1, WASM_BR_TABLE(WASM_GET_LOCAL(0), 1, BR_TARGET(depth)))}; |
| 1745 WASM_GET_LOCAL(0)); | 1739 if (depth <= 1) { |
| 1746 EXPECT_FAILURE_INLINE( | 1740 EXPECT_VERIFIES(&env_v_i, code); |
| 1747 &env_v_i, | 1741 } else { |
| 1748 WASM_TABLESWITCH_OP(0, 2, WASM_CASE_BR(depth), WASM_CASE_BR(depth)), | 1742 EXPECT_FAILURE(&env_v_i, code); |
| 1749 WASM_GET_LOCAL(0)); | 1743 } |
| 1750 } | 1744 } |
| 1751 } | 1745 } |
| 1752 | 1746 |
| 1753 TEST_F(AstDecoderTest, TableSwitch_invalid_case_ref) { | |
| 1754 EXPECT_FAILURE_INLINE(&env_i_i, WASM_TABLESWITCH_OP(0, 1, WASM_CASE(0)), | |
| 1755 WASM_GET_LOCAL(0)); | |
| 1756 EXPECT_FAILURE_INLINE(&env_i_i, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(1)), | |
| 1757 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_ZERO)); | |
| 1758 } | |
| 1759 | |
| 1760 TEST_F(AstDecoderTest, TableSwitch1_br) { | |
| 1761 EXPECT_VERIFIES_INLINE( | |
| 1762 &env_i_i, WASM_TABLESWITCH_OP(1, 1, WASM_CASE(0)), | |
| 1763 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_ZERO))); | |
| 1764 } | |
| 1765 | |
| 1766 TEST_F(AstDecoderTest, TableSwitch2_br) { | |
| 1767 EXPECT_VERIFIES_INLINE( | |
| 1768 &env_i_i, WASM_TABLESWITCH_OP(2, 2, WASM_CASE(0), WASM_CASE(1)), | |
| 1769 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_I8(0)), | |
| 1770 WASM_BRV(0, WASM_I8(1)))); | |
| 1771 | |
| 1772 EXPECT_FAILURE_INLINE( | |
| 1773 &env_f_ff, WASM_TABLESWITCH_OP(2, 2, WASM_CASE(0), WASM_CASE(1)), | |
| 1774 WASM_TABLESWITCH_BODY(WASM_ZERO, WASM_BRV(0, WASM_I8(3)), | |
| 1775 WASM_BRV(0, WASM_I8(4)))); | |
| 1776 } | |
| 1777 | |
| 1778 TEST_F(AstDecoderTest, TableSwitch2x2) { | |
| 1779 EXPECT_VERIFIES_INLINE( | |
| 1780 &env_i_i, WASM_TABLESWITCH_OP(2, 4, WASM_CASE(0), WASM_CASE(1), | |
| 1781 WASM_CASE(0), WASM_CASE(1)), | |
| 1782 WASM_TABLESWITCH_BODY(WASM_GET_LOCAL(0), WASM_BRV(0, WASM_I8(3)), | |
| 1783 WASM_BRV(0, WASM_I8(4)))); | |
| 1784 } | |
| 1785 | |
| 1786 TEST_F(AstDecoderTest, ExprBreakNesting1) { | 1747 TEST_F(AstDecoderTest, ExprBreakNesting1) { |
| 1787 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BRV(0, WASM_ZERO))); | 1748 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BRV(0, WASM_ZERO))); |
| 1788 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BR(0))); | 1749 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BR(0))); |
| 1789 EXPECT_VERIFIES_INLINE(&env_v_v, | 1750 EXPECT_VERIFIES_INLINE(&env_v_v, |
| 1790 WASM_BLOCK(1, WASM_BRV_IF(0, WASM_ZERO, WASM_ZERO))); | 1751 WASM_BLOCK(1, WASM_BRV_IF(0, WASM_ZERO, WASM_ZERO))); |
| 1791 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BR_IF(0, WASM_ZERO))); | 1752 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_BLOCK(1, WASM_BR_IF(0, WASM_ZERO))); |
| 1792 | 1753 |
| 1793 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_LOOP(1, WASM_BRV(0, WASM_ZERO))); | 1754 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_LOOP(1, WASM_BRV(0, WASM_ZERO))); |
| 1794 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_LOOP(1, WASM_BR(0))); | 1755 EXPECT_VERIFIES_INLINE(&env_v_v, WASM_LOOP(1, WASM_BR(0))); |
| 1795 EXPECT_VERIFIES_INLINE(&env_v_v, | 1756 EXPECT_VERIFIES_INLINE(&env_v_v, |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2332 EXPECT_ARITY(1, kExprF64SConvertI64); | 2293 EXPECT_ARITY(1, kExprF64SConvertI64); |
| 2333 EXPECT_ARITY(1, kExprF64UConvertI64); | 2294 EXPECT_ARITY(1, kExprF64UConvertI64); |
| 2334 EXPECT_ARITY(1, kExprF64ConvertF32); | 2295 EXPECT_ARITY(1, kExprF64ConvertF32); |
| 2335 EXPECT_ARITY(1, kExprF64ReinterpretI64); | 2296 EXPECT_ARITY(1, kExprF64ReinterpretI64); |
| 2336 EXPECT_ARITY(1, kExprI32ReinterpretF32); | 2297 EXPECT_ARITY(1, kExprI32ReinterpretF32); |
| 2337 EXPECT_ARITY(1, kExprI64ReinterpretF64); | 2298 EXPECT_ARITY(1, kExprI64ReinterpretF64); |
| 2338 } | 2299 } |
| 2339 } // namespace wasm | 2300 } // namespace wasm |
| 2340 } // namespace internal | 2301 } // namespace internal |
| 2341 } // namespace v8 | 2302 } // namespace v8 |
| OLD | NEW |