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 |