ziglang / zig

General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
https://ziglang.org
MIT License
34.23k stars 2.5k forks source link

recent compiler crashes when compiling bun #16494

Closed Jarred-Sumner closed 1 year ago

Jarred-Sumner commented 1 year ago

Zig Version

0.11.0-dev.4059+17255bed4

Steps to Reproduce and Observed Behavior

  1. git clone https://github.com/oven-sh/bun
  2. zig build obj
  3. 💥 segfault
zig build-obj bun-debug Debug native-native-gnu.2.27: error: the following command terminated unexpectedly:
/home/jarred/zig/0.11.0-dev.4059+17255bed4/files/zig build-obj -freference-trace=256 /home/jarred/Code/bun/root.zig -lc -femit-bin=/home/jarred/Code/bun/packages/debug-bun-linux-x64/bun-debug.o -fno-strip --eh-frame-hdr --emit-relocs -ffunction-sections --cache-dir /home/jarred/Code/bun/zig-cache --global-cache-dir /home/jarred/.cache/zig --name bun-debug -fno-compiler-rt -fno-stack-check -fno-omit-frame-pointer -target native-native-gnu.2.27 -mcpu haswell --mod build_options::/home/jarred/Code/bun/zig-cache/c/152e930bfb125fe9e939c2660f3432b5/options.zig --mod async_io::/home/jarred/Code/bun/src/io/io_linux.zig --deps async_io,build_options -I /home/jarred/Code/bun/src/deps -I /home/jarred/Code/bun/src/deps --main-pkg-path /home/jarred/Code/bun --listen=- 
Build Summary: 1/3 steps succeeded; 1 failed (disable with --summary none)
obj transitive failure
└─ zig build-obj bun-debug Debug native-native-gnu.2.27 failure
error: the following build command failed with exit code 1:
/home/jarred/Code/bun/zig-cache/o/4d1f23298632acbf6ac0a879ce219c2a/build /home/jarred/zig/0.11.0-dev.4059+17255bed4/files/zig /home/jarred/Code/bun /home/jarred/Code/bun/zig-cache /home/jarred/.cache/zig obj -freference-trace -freference-trace -Dcpu=native
make: *** [Makefile:1099: dev-obj-track] Error 1

Here is a very unhelpful error stack trace from lldb:

 thread #1, name = 'zig', stop reason = signal SIGSEGV: invalid address (fault address: 0x0)
  * frame #0: 0x0000000007d74e0a zig`___lldb_unnamed_symbol160694 + 58
    frame #1: 0x0000000007ec9098 zig`___lldb_unnamed_symbol161287 + 120
    frame #2: 0x0000000007ec2fc4 zig`___lldb_unnamed_symbol161252 + 4372
    frame #3: 0x0000000007ec471f zig`___lldb_unnamed_symbol161255 + 47
    frame #4: 0x0000000007eb169d zig`___lldb_unnamed_symbol161179 + 605
    frame #5: 0x0000000007ebc973 zig`___lldb_unnamed_symbol161237 + 3075
    frame #6: 0x0000000007e9740b zig`___lldb_unnamed_symbol161172 + 3211
    frame #7: 0x0000000007e8da4e zig`___lldb_unnamed_symbol161154 + 3854
    frame #8: 0x0000000007e7db2f zig`___lldb_unnamed_symbol161135 + 7615
    frame #9: 0x0000000007e7ba22 zig`___lldb_unnamed_symbol161132 + 1010
    frame #10: 0x00000000081d2ca7 zig`___lldb_unnamed_symbol163986 + 1143
    frame #11: 0x00000000081d23ca zig`___lldb_unnamed_symbol163985 + 362
    frame #12: 0x0000000007e32055 zig`___lldb_unnamed_symbol160955 + 15701
    frame #13: 0x00000000081d3505 zig`___lldb_unnamed_symbol163988 + 165
    frame #14: 0x0000000007e34ba8 zig`___lldb_unnamed_symbol160955 + 26792
    frame #15: 0x00000000081d1872 zig`___lldb_unnamed_symbol163983 + 706
    frame #16: 0x0000000007e53547 zig`___lldb_unnamed_symbol160955 + 152135
    frame #17: 0x00000000081d3505 zig`___lldb_unnamed_symbol163988 + 165
    frame #18: 0x0000000007e34ba8 zig`___lldb_unnamed_symbol160955 + 26792
    frame #19: 0x00000000081d3505 zig`___lldb_unnamed_symbol163988 + 165
    frame #20: 0x0000000007e34ba8 zig`___lldb_unnamed_symbol160955 + 26792
    frame #21: 0x00000000081d1872 zig`___lldb_unnamed_symbol163983 + 706
    frame #22: 0x0000000007e53547 zig`___lldb_unnamed_symbol160955 + 152135
    frame #23: 0x00000000081d3505 zig`___lldb_unnamed_symbol163988 + 165
    frame #24: 0x0000000007e34ba8 zig`___lldb_unnamed_symbol160955 + 26792
    frame #25: 0x00000000081d3505 zig`___lldb_unnamed_symbol163988 + 165
    frame #26: 0x0000000007e34ba8 zig`___lldb_unnamed_symbol160955 + 26792
    frame #27: 0x0000000007e7ce35 zig`___lldb_unnamed_symbol161135 + 4293
    frame #28: 0x0000000007e7ba22 zig`___lldb_unnamed_symbol161132 + 1010
    frame #29: 0x00000000081d2ca7 zig`___lldb_unnamed_symbol163986 + 1143
    frame #30: 0x00000000081d23ca zig`___lldb_unnamed_symbol163985 + 362
    frame #31: 0x0000000007e32055 zig`___lldb_unnamed_symbol160955 + 15701
    frame #32: 0x00000000081d3505 zig`___lldb_unnamed_symbol163988 + 165
    frame #33: 0x0000000007e34ba8 zig`___lldb_unnamed_symbol160955 + 26792
    frame #34: 0x00000000081d1bd3 zig`___lldb_unnamed_symbol163983 + 1571
    frame #35: 0x0000000007e53547 zig`___lldb_unnamed_symbol160955 + 152135
    frame #36: 0x00000000081d3505 zig`___lldb_unnamed_symbol163988 + 165
    frame #37: 0x0000000007e34ba8 zig`___lldb_unnamed_symbol160955 + 26792
    frame #38: 0x00000000081d3505 zig`___lldb_unnamed_symbol163988 + 165
    frame #39: 0x0000000007e34ba8 zig`___lldb_unnamed_symbol160955 + 26792
    frame #40: 0x0000000007e7ce35 zig`___lldb_unnamed_symbol161135 + 4293
    frame #41: 0x0000000007d8feac zig`___lldb_unnamed_symbol160769 + 3116
    frame #42: 0x0000000007d7d698 zig`___lldb_unnamed_symbol160713 + 22920
    frame #43: 0x0000000007d6c659 zig`___lldb_unnamed_symbol160675 + 473
    frame #44: 0x0000000007c821d1 zig`___lldb_unnamed_symbol159719 + 455841
    frame #45: 0x0000000007c0ea67 zig`___lldb_unnamed_symbol159703 + 11319
    frame #46: 0x0000000007c0bdc7 zig`___lldb_unnamed_symbol159701 + 199
(lldb) 

Expected Behavior

no segfault. maybe an error message if there was a breaking change between bf827d0b5 and 17255bed4

Jarred-Sumner commented 1 year ago

Bisecting, it's between these two: https://github.com/ziglang/zig/compare/11695745e...cec1e973b

Considering that this isn't wasm or cbe which most of the changes in there are for, I'm inclined to think the segfault started with #16318

andrewrk commented 1 year ago

Additional steps to reproduce

git submodule update --init --recursive
touch src/runtime.out.js
touch src/fallback.out.js

After that, I was able to confirm it. A debug build of the compiler gives a lot more useful info:

andy@ark ~/D/bun (main)> ~/Downloads/zig/build-release/stage4/bin/zig build obj
Build linux-x64 v5.15.108 - v5.15.108 (haswell)
Output: /home/andy/Downloads/bun/packages/debug-bun-linux-x64/bun-debug

zig build-obj bun-debug Debug native-native-gnu.2.27: error: thread 866839 panic: reached unreachable code
Analyzing src/logger.zig: src/logger.zig:Data.writeFormat__anon_48000
      %1650 = dbg_block_begin()
      %1651 = dbg_stmt(8, 13)
      %1659 = block({
        %1652 = dbg_stmt(8, 17)
        %1653 = field_val(%1640, "text") node_offset:262:13 to :262:22
        %1654 = dbg_stmt(8, 22)
        %1655 = field_val(%1653, "len") node_offset:262:13 to :262:26
        %1656 = cmp_eq(%1655, @InternPool.Index.zero) node_offset:262:13 to :262:31
        %1657 = as_node(@InternPool.Index.bool_type, %1656) node_offset:262:13 to :262:31
        %1658 = condbr(%1657, {
          %1660 = dbg_block_begin()
          %1661 = dbg_stmt(8, 33)
          %1662 = restore_err_ret_index(%4294967211, %4294967211)
          %1663 = ret_node(@InternPool.Index.void_value) node_offset:262:33 to :262:39
          %1664 = dbg_block_end()
          %1665 = break(%1659, @InternPool.Index.unreachable_value)
        }, {
          %1666 = break(%1659, @InternPool.Index.void_value)
        }) node_offset:262:9 to :262:39
      }) node_offset:262:9 to :262:39
      %1667 = ensure_result_used(%1659) node_offset:262:9 to :262:39
      %1668 = dbg_stmt(10, 9)
      %1670 = dbg_stmt(10, 39)
      %1672 = enum_literal("err") token_offset:265:14 to :265:17
      %1686 = enum_literal("note") token_offset:266:14 to :266:18
      %1671 = switch_block(%1644,
        else => {
          %1708 = dbg_block_begin()
          %1709 = block_comptime({
            %1710 = decl_ref("Output") token_offset:267:30 to :267:36
            %1711 = field_ptr(%1710, "color_map") node_offset:267:30 to :267:46
            %1712 = dbg_stmt(13, 50)
            %1713 = field_call(.compile_time, %1711, "get", [
              {
                %1714 = str("d")
                %1715 = break_inline(%1713, %1714)
              },
            ]) node_offset:267:30 to :267:55
            %1716 = optional_payload_safe(%1713) node_offset:267:30 to :267:57
            %1717 = decl_ref("Output") token_offset:267:61 to :267:67
            %1718 = field_ptr(%1717, "color_map") node_offset:267:61 to :267:77
            %1719 = dbg_stmt(13, 81)
            %1720 = field_call(.compile_time, %1718, "get", [
              {
                %1721 = str("b")
                %1722 = break_inline(%1720, %1721)
              },
            ]) node_offset:267:61 to :267:86
            %1723 = optional_payload_safe(%1720) node_offset:267:61 to :267:88
            %1724 = array_cat(%1716, %1723) node_offset:267:30 to :267:88
            %1725 = break(%1709, %1724)
          }) node_offset:267:30 to :267:88
          %1726 = store_to_block_ptr(%1669, %1709)
          %1728 = break(%1671, %1709)
        },
        %1672 => {
          %1673 = dbg_block_begin()
          %1674 = block_comptime({
            %1675 = decl_ref("Output") token_offset:265:30 to :265:36
            %1676 = field_ptr(%1675, "color_map") node_offset:265:30 to :265:46
            %1677 = dbg_stmt(11, 50)
            %1678 = field_call(.compile_time, %1676, "get", [
              {
                %1679 = str("b")
                %1680 = break_inline(%1678, %1679)
              },
            ]) node_offset:265:30 to :265:55
            %1681 = optional_payload_safe(%1678) node_offset:265:30 to :265:57
            %1682 = break(%1674, %1681)
          }) node_offset:265:30 to :265:57
          %1683 = store_to_block_ptr(%1669, %1674)
          %1685 = break(%1671, %1674)
        },
        %1686 => {
          %1687 = dbg_block_begin()
          %1688 = block_comptime({
            %1689 = decl_ref("Output") token_offset:266:31 to :266:37
            %1690 = field_ptr(%1689, "color_map") node_offset:266:31 to :266:47
            %1691 = dbg_stmt(12, 51)
            %1692 = field_call(.compile_time, %1690, "get", [
              {
                %1693 = str("cyan")
                %1694 = break_inline(%1692, %1693)
              },
            ]) node_offset:266:31 to :266:59
            %1695 = optional_payload_safe(%1692) node_offset:266:31 to :266:61
            %1696 = decl_ref("Output") token_offset:266:65 to :266:71
            %1697 = field_ptr(%1696, "color_map") node_offset:266:65 to :266:81
            %1698 = dbg_stmt(12, 85)
            %1699 = field_call(.compile_time, %1697, "get", [
              {
                %1700 = str("d")
                %1701 = break_inline(%1699, %1700)
              },
            ]) node_offset:266:65 to :266:90
            %1702 = optional_payload_safe(%1699) node_offset:266:65 to :266:92
            %1703 = array_cat(%1695, %1702) node_offset:266:31 to :266:92
            %1704 = break(%1688, %1703)
          }) node_offset:266:31 to :266:92
          %1705 = store_to_block_ptr(%1669, %1688)
          %1707 = break(%1671, %1688)
        }) node_offset:264:31 to :264:37
      %1730 = save_err_ret_index(%1671)
      %1731 = dbg_var_val(%1671, "message_color")
      %1732 = dbg_stmt(16, 9)
      %1733 = block_comptime({
        %1734 = decl_val("string") token_offset:270:27 to :270:33
        %1735 = break(%1733, %1734)
      }) node_offset:270:27 to :270:33
      %1737 = dbg_stmt(16, 44)
      %1739 = enum_literal("err") token_offset:271:14 to :271:17
      %1753 = enum_literal("note") token_offset:272:14 to :272:18
      %1738 = switch_block(%1644,
        else => {
          %1767 = dbg_block_begin()
          %1768 = block_comptime({
            %1769 = decl_ref("Output") token_offset:273:30 to :273:36
            %1770 = field_ptr(%1769, "color_map") node_offset:273:30 to :273:46
            %1771 = dbg_stmt(19, 50)
            %1772 = field_call(.compile_time, %1770, "get", [
              {
                %1773 = str("d")
                %1774 = break_inline(%1772, %1773)
              },
            ]) node_offset:273:30 to :273:55
            %1775 = optional_payload_safe(%1772) node_offset:273:30 to :273:57
            %1776 = break(%1768, %1775)
          }) node_offset:273:30 to :273:57
          %1777 = as(%1733, %1768)
          %1778 = dbg_block_end()
          %1779 = break(%1738, %1777)
        },
        %1739 => {
          %1740 = dbg_block_begin()
          %1741 = block_comptime({
            %1742 = decl_ref("Output") token_offset:271:30 to :271:36
            %1743 = field_ptr(%1742, "color_map") node_offset:271:30 to :271:46
            %1744 = dbg_stmt(17, 50)
            %1745 = field_call(.compile_time, %1743, "get", [
              {
                %1746 = str("red")
                %1747 = break_inline(%1745, %1746)
              },
            ]) node_offset:271:30 to :271:57
            %1748 = optional_payload_safe(%1745) node_offset:271:30 to :271:59
            %1749 = break(%1741, %1748)
          }) node_offset:271:30 to :271:59
          %1750 = as(%1733, %1741)
          %1751 = dbg_block_end()
          %1752 = break(%1738, %1750)
        },
        %1753 => {
          %1754 = dbg_block_begin()
          %1755 = block_comptime({
            %1756 = decl_ref("Output") token_offset:272:31 to :272:37
            %1757 = field_ptr(%1756, "color_map") node_offset:272:31 to :272:47
            %1758 = dbg_stmt(18, 51)
            %1759 = field_call(.compile_time, %1757, "get", [
              {
                %1760 = str("cyan")
                %1761 = break_inline(%1759, %1760)
              },
            ]) node_offset:272:31 to :272:59
            %1762 = optional_payload_safe(%1759) node_offset:272:31 to :272:61
            %1763 = break(%1755, %1762)
          }) node_offset:272:31 to :272:61
          %1764 = as(%1733, %1755)
          %1765 = dbg_block_end()
          %1766 = break(%1738, %1764)
        }) node_offset:270:36 to :270:42
      %1781 = save_err_ret_index(%1738)
      %1782 = as_node(%1733, %1738) node_offset:270:36 to :270:42
      %1783 = dbg_var_val(%1782, "color_name")
      %1784 = dbg_stmt(22, 9)
      %1785 = ref(%1641) token_offset:276:13 to :276:15
      %1786 = dbg_stmt(22, 15)
      %1787 = dbg_stmt(22, 24)
      %1788 = field_call(.auto, %1785, "writeAll", [
        {
          %1789 = str("\n\n")
          %1790 = break_inline(%1788, %1789)
        },
      ]) node_offset:276:13 to :276:32
      %1791 = try(%1788, {
        %1792 = err_union_code(%1788) node_offset:276:9 to :276:32
        %1793 = dbg_stmt(22, 9)
        %1794 = ret_node(%1792) node_offset:276:9 to :276:32
      }) node_offset:276:9 to :276:32
      %1795 = ensure_result_used(%1791) node_offset:276:9 to :276:32
      %1796 = dbg_stmt(24, 13)
      %1801 = block({
        %1797 = block_comptime({
          %1798 = break(%1797, %1646)
        }) node_offset:278:22 to :278:40
        %1799 = as_node(@InternPool.Index.bool_type, %1797) node_offset:278:22 to :278:40
        %1800 = condbr(%1799, {
          %1802 = dbg_block_begin()
          %1803 = block({
            %1804 = dbg_block_begin()
            %1805 = dbg_stmt(25, 13)
            %1806 = ref(%1641) token_offset:279:17 to :279:19
            %1807 = dbg_stmt(25, 19)
            %1808 = dbg_stmt(25, 28)
            %1809 = field_call(.auto, %1806, "writeAll", [
              {
                %1810 = break_inline(%1809, %1782)
              },
            ]) node_offset:279:17 to :279:40
            %1811 = try(%1809, {
              %1812 = err_union_code(%1809) node_offset:279:13 to :279:40
              %1813 = dbg_stmt(25, 13)
              %1814 = ret_node(%1812) node_offset:279:13 to :279:40
            }) node_offset:279:13 to :279:40
            %1815 = ensure_result_used(%1811) node_offset:279:13 to :279:40
            %1816 = dbg_block_end()
            %1817 = restore_err_ret_index(%1803, %4294967211)
            %1818 = break(%1803, @InternPool.Index.void_value)
          }) node_offset:278:42 to :278:43
          %1819 = dbg_block_end()
          %1820 = break(%1801, @InternPool.Index.void_value)
        }, {
          %1821 = break(%1801, @InternPool.Index.void_value)
        }) node_offset:278:9 to :278:11
      }) node_offset:278:9 to :278:11
      %1822 = ensure_result_used(%1801) node_offset:278:9 to :278:11
      %1823 = dbg_stmt(28, 9)
      %1824 = ref(%1641) token_offset:282:13 to :282:15
      %1825 = dbg_stmt(28, 15)
      %1826 = dbg_stmt(28, 24)
      %1827 = field_call(.auto, %1824, "writeAll", [
        {
          %1828 = ref(%1644) token_offset:282:25 to :282:29
          %1829 = dbg_stmt(28, 29)
          %1830 = dbg_stmt(28, 36)
          %1831 = field_call(.auto, %1828, "string", []) node_offset:282:25 to :282:38
          %1832 = break_inline(%1827, %1831)
        },
      ]) node_offset:282:13 to :282:39
      %1833 = try(%1827, {
        %1834 = err_union_code(%1827) node_offset:282:9 to :282:39
        %1835 = dbg_stmt(28, 9)
        %1836 = ret_node(%1834) node_offset:282:9 to :282:39
      }) node_offset:282:9 to :282:39
      %1837 = ensure_result_used(%1833) node_offset:282:9 to :282:39
      %1838 = dbg_stmt(30, 9)
      %1839 = decl_ref("std") token_offset:284:13 to :284:16
      %1840 = dbg_stmt(30, 16)
      %1841 = field_ptr(%1839, "fmt") node_offset:284:13 to :284:20
      %1842 = dbg_stmt(30, 20)
      %1843 = dbg_stmt(30, 27)
      %1844 = field_call(.auto, %1841, "format", [
        {
          %1845 = break_inline(%1844, %1641)
        },
        {
          %1846 = block_comptime({
            %1847 = decl_ref("Output") token_offset:284:41 to :284:47
            %1848 = dbg_stmt(30, 57)
            %1849 = field_call(.compile_time, %1847, "prettyFmt", [
              {
                %1850 = str("<r><d>: <r>")
                %1851 = break_inline(%1849, %1850)
              },
              {
                %1852 = break_inline(%1849, %1646)
              },
            ]) node_offset:284:41 to :284:92
            %1853 = break(%1846, %1849)
          }) node_offset:284:41 to :284:92
          %1854 = break_inline(%1844, %1846)
        },
        {
          %1855 = break_inline(%1844, @InternPool.Index.empty_struct)
        },
      ]) node_offset:284:13 to :284:98
    > %1856 = try(%1844, {
        %1857 = err_union_code(%1844) node_offset:284:9 to :284:98
        %1858 = dbg_stmt(30, 9)
        %1859 = ret_node(%1857) node_offset:284:9 to :284:98
      }) node_offset:284:9 to :284:98
      %1860 = ensure_result_used(%1856) node_offset:284:9 to :284:98
      %1861 = dbg_stmt(32, 13)
      %1866 = block({
        %1862 = block_comptime({
          %1863 = break(%1862, %1646)
        }) node_offset:286:22 to :286:40
        %1864 = as_node(@InternPool.Index.bool_type, %1862) node_offset:286:22 to :286:40
        %1865 = condbr(%1864, {
          %1867 = dbg_block_begin()
          %1868 = block({
            %1869 = dbg_block_begin()
            %1870 = dbg_stmt(33, 13)
            %1871 = ref(%1641) token_offset:287:17 to :287:19
            %1872 = dbg_stmt(33, 19)
            %1873 = dbg_stmt(33, 28)
            %1874 = field_call(.auto, %1871, "writeAll", [
              {
                %1875 = break_inline(%1874, %1671)
              },
            ]) node_offset:287:17 to :287:43
            %1876 = try(%1874, {
              %1877 = err_union_code(%1874) node_offset:287:13 to :287:43
              %1878 = dbg_stmt(33, 13)
              %1879 = ret_node(%1877) node_offset:287:13 to :287:43
            }) node_offset:287:13 to :287:43
            %1880 = ensure_result_used(%1876) node_offset:287:13 to :287:43
            %1881 = dbg_block_end()
            %1882 = restore_err_ret_index(%1868, %4294967211)
            %1883 = break(%1868, @InternPool.Index.void_value)
          }) node_offset:286:42 to :286:43
          %1884 = dbg_block_end()
          %1885 = break(%1866, @InternPool.Index.void_value)
        }, {
          %1886 = break(%1866, @InternPool.Index.void_value)
        }) node_offset:286:9 to :286:11
      }) node_offset:286:9 to :286:11
      %1887 = ensure_result_used(%1866) node_offset:286:9 to :286:11
      %1888 = dbg_stmt(36, 9)
      %1889 = decl_ref("std") token_offset:290:13 to :290:16
      %1890 = dbg_stmt(36, 16)
      %1891 = field_ptr(%1889, "fmt") node_offset:290:13 to :290:20
      %1892 = dbg_stmt(36, 20)
      %1893 = dbg_stmt(36, 27)
      %1894 = field_call(.auto, %1891, "format", [
        {
          %1895 = break_inline(%1894, %1641)
        },
        {
          %1896 = block_comptime({
            %1897 = decl_ref("Output") token_offset:290:41 to :290:47
            %1898 = dbg_stmt(36, 57)
            %1899 = field_call(.compile_time, %1897, "prettyFmt", [
              {
                %1900 = str("{s}<r>\n")
                %1901 = break_inline(%1899, %1900)
              },
              {
                %1902 = break_inline(%1899, %1646)
              },
            ]) node_offset:290:41 to :290:89
            %1903 = break(%1896, %1899)
          }) node_offset:290:41 to :290:89
          %1904 = break_inline(%1894, %1896)
        },
        {
          %1905 = dbg_stmt(36, 97)
          %1906 = field_val(%1640, "text") node_offset:290:93 to :290:102
          %1907 = array_init_anon({%1906}) node_offset:290:91 to :290:103
          %1908 = break_inline(%1894, %1907)
        },
      ]) node_offset:290:13 to :290:104
      %1909 = try(%1894, {
        %1910 = err_union_code(%1894) node_offset:290:9 to :290:104
        %1911 = dbg_stmt(36, 9)
        %1912 = ret_node(%1910) node_offset:290:9 to :290:104
      }) node_offset:290:9 to :290:104
      %1913 = ensure_result_used(%1909) node_offset:290:9 to :290:104
      %1914 = dbg_stmt(38, 13)
      %1919 = block({
        %1915 = dbg_stmt(38, 17)
        %1916 = field_val(%1640, "location") node_offset:292:13 to :292:26
        %1917 = is_non_null(%1916) node_offset:292:13 to :292:26
        %1918 = condbr(%1917, {
          %1920 = dbg_block_begin()
          %1921 = optional_payload_unsafe(%1916) node_offset:292:39 to :292:40
          %1922 = dbg_var_val(%1921, "location")
          %1923 = block({
            %1924 = dbg_block_begin()
            %1925 = dbg_stmt(39, 17)
            %1930 = block({
              %1926 = dbg_stmt(39, 25)
              %1927 = field_val(%1921, "line_text") node_offset:293:17 to :293:35
              %1928 = is_non_null(%1927) node_offset:293:17 to :293:35
              %1929 = condbr(%1928, {
                %1931 = dbg_block_begin()
                %1932 = optional_payload_unsafe(%1927) node_offset:293:50 to :293:51
                %1933 = dbg_var_val(%1932, "line_text_")
                %1934 = block({
                  %1935 = dbg_block_begin()
                  %1936 = dbg_stmt(40, 17)
                  %1938 = decl_ref("std") token_offset:294:35 to :294:38
                  %1939 = dbg_stmt(40, 38)
                  %1940 = field_ptr(%1938, "mem") node_offset:294:35 to :294:42
                  %1941 = dbg_stmt(40, 42)
                  %1942 = dbg_stmt(40, 52)
                  %1943 = field_call(.auto, %1940, "trimRight", [
                    {
                      %1944 = break_inline(%1943, @InternPool.Index.u8_type)
                    },
                    {
                      %1945 = break_inline(%1943, %1932)
                    },
                    {
                      %1946 = str("\r\n\t")
                      %1947 = break_inline(%1943, %1946)
                    },
                  ]) node_offset:294:35 to :294:78
                  %2004 = ref(%1943) token_offset:303:48 to :303:57
                  %1949 = save_err_ret_index(%1943)
                  %1950 = dbg_var_val(%1943, "line_text")
                  %1951 = dbg_stmt(42, 17)
                  %1952 = dbg_stmt(42, 78)
                  %1953 = field_val(%1921, "column") node_offset:296:70 to :296:85
                  %1954 = max(%1953, @InternPool.Index.one) node_offset:296:65 to :296:89
                  %1955 = dbg_stmt(42, 90)
                  %1956 = sub(%1954, @InternPool.Index.one) node_offset:296:65 to :296:93
                  %1957 = dbg_stmt(42, 56)
                  %1958 = int_cast(@InternPool.Index.u32_type, %1956) node_offset:296:56 to :296:94
                  %1959 = as_node(@InternPool.Index.u32_type, %1958) node_offset:296:56 to :296:94
                  %1960 = dbg_var_val(%1959, "location_in_line_text")
                  %1961 = save_err_ret_index(%1959)
                  %1962 = dbg_stmt(43, 17)
                  %1963 = dbg_stmt(43, 46)
                  %1964 = field_val(%1921, "column") node_offset:297:38 to :297:53
                  %1965 = negate(@InternPool.Index.one) node_offset:297:56 to :297:58
                  %1966 = cmp_gt(%1964, %1965) node_offset:297:38 to :297:58
                  %1967 = as_node(@InternPool.Index.bool_type, %1966) node_offset:297:38 to :297:58
                  %1968 = bool_br_and(%1967, {
                    %1969 = dbg_stmt(43, 72)
                    %1970 = field_val(%1943, "len") node_offset:297:63 to :297:76
                    %1971 = cmp_gt(%1970, @InternPool.Index.zero) node_offset:297:63 to :297:80
                    %1972 = as_node(@InternPool.Index.bool_type, %1971) node_offset:297:63 to :297:80
                    %1973 = break_inline(%1968, %1972)
                  }
                  %1974 = as_node(@InternPool.Index.bool_type, %1968) node_offset:297:38 to :297:80
                  %1975 = bool_br_and(%1974, {
                    %1976 = dbg_stmt(43, 118)
                    %1977 = field_val(%1943, "len") node_offset:297:109 to :297:122
                    %1978 = cmp_lt(%1959, %1977) node_offset:297:85 to :297:122
                    %1979 = as_node(@InternPool.Index.bool_type, %1978) node_offset:297:85 to :297:122
                    %1980 = break_inline(%1975, %1979)
                  }
                  %1981 = dbg_var_val(%1975, "has_position")
                  %1982 = dbg_stmt(45, 21)
                  %1985 = block({
                    %1983 = as_node(@InternPool.Index.bool_type, %1975) node_offset:299:21 to :299:33
                    %1984 = condbr(%1983, {
                      %1986 = dbg_block_begin()
                      %1987 = block({
                        %1988 = dbg_block_begin()
                        %1989 = dbg_stmt(46, 25)
                        %1994 = block({
                          %1990 = block_comptime({
                            %1991 = break(%1990, %1646)
                          }) node_offset:300:34 to :300:52
                          %1992 = as_node(@InternPool.Index.bool_type, %1990) node_offset:300:34 to :300:52
                          %1993 = condbr(%1992, {
                            %1995 = dbg_block_begin()
                            %1996 = block({
                              %1997 = dbg_block_begin()
                              %1998 = dbg_stmt(47, 25)
                              %1999 = dbg_stmt(47, 57)
                              %2000 = field_val(%1671, "len") node_offset:301:44 to :301:61
                              %2001 = cmp_gt(%2000, @InternPool.Index.zero) node_offset:301:44 to :301:65
                              %2002 = dbg_var_val(%2001, "is_colored")
                              %2003 = dbg_stmt(49, 25)
                              %2005 = dbg_stmt(49, 57)
                              %2006 = slice_end(%2004, @InternPool.Index.zero, %1959) node_offset:303:48 to :303:83
                              %2007 = dbg_var_val(%2006, "before_segment")
                              %2008 = dbg_stmt(51, 25)
                              %2009 = ref(%1641) token_offset:305:29 to :305:31
                              %2010 = dbg_stmt(51, 31)
                              %2011 = dbg_stmt(51, 40)
                              %2012 = field_call(.auto, %2009, "writeAll", [
                                {
                                  %2013 = break_inline(%2012, %2006)
                                },
                              ]) node_offset:305:29 to :305:56
                              %2014 = try(%2012, {
                                %2015 = err_union_code(%2012) node_offset:305:25 to :305:56
                                %2016 = dbg_stmt(51, 25)
                                %2017 = ret_node(%2015) node_offset:305:25 to :305:56
                              }) node_offset:305:25 to :305:56
                              %2018 = ensure_result_used(%2014) node_offset:305:25 to :305:56
                              %2019 = dbg_stmt(52, 29)
                              %2022 = block({
                                %2020 = as_node(@InternPool.Index.bool_type, %2001) node_offset:306:29 to :306:39
                                %2021 = condbr(%2020, {
                                  %2023 = dbg_block_begin()
                                  %2024 = block({
                                    %2025 = dbg_block_begin()
                                    %2026 = dbg_stmt(53, 29)
                                    %2027 = ref(%1641) token_offset:307:33 to :307:35
                                    %2028 = dbg_stmt(53, 35)
                                    %2029 = dbg_stmt(53, 44)
                                    %2030 = field_call(.auto, %2027, "writeAll", [
                                      {
                                        %2031 = break_inline(%2030, %1782)
                                      },
                                    ]) node_offset:307:33 to :307:56
                                    %2032 = try(%2030, {
                                      %2033 = err_union_code(%2030) node_offset:307:29 to :307:56
                                      %2034 = dbg_stmt(53, 29)
                                      %2035 = ret_node(%2033) node_offset:307:29 to :307:56
                                    }) node_offset:307:29 to :307:56
                                    %2036 = ensure_result_used(%2032) node_offset:307:29 to :307:56
                                    %2037 = dbg_block_end()
                                    %2038 = restore_err_ret_index(%2024, %4294967211)
                                    %2039 = break(%2024, @InternPool.Index.void_value)
                                  }) node_offset:306:41 to :306:42
                                  %2040 = dbg_block_end()
                                  %2041 = break(%2022, @InternPool.Index.void_value)
                                }, {
                                  %2042 = break(%2022, @InternPool.Index.void_value)
                                }) node_offset:306:25 to :306:27
                              }) node_offset:306:25 to :306:27
                              %2043 = ensure_result_used(%2022) node_offset:306:25 to :306:27
                              %2044 = dbg_stmt(56, 25)
                              %2045 = dbg_stmt(56, 55)
                              %2046 = slice_start(%2004, %1959) node_offset:310:46 to :310:80
                              %2165 = ref(%2046) token_offset:333:45 to :333:57
                              %2047 = dbg_var_val(%2046, "rest_of_line")
                              %2048 = dbg_stmt(58, 29)
                              %2054 = block({
                                %2049 = dbg_stmt(58, 41)
                                %2050 = field_val(%2046, "len") node_offset:312:29 to :312:45
                                %2051 = cmp_gt(%2050, @InternPool.Index.zero) node_offset:312:29 to :312:49
                                %2052 = as_node(@InternPool.Index.bool_type, %2051) node_offset:312:29 to :312:49
                                %2053 = condbr(%2052, {
                                  %2055 = dbg_block_begin()
                                  %2056 = block({
                                    %2057 = dbg_block_begin()
                                    %2058 = dbg_stmt(59, 29)
                                    %2059 = alloc_mut(@InternPool.Index.usize_type) node_offset:313:29 to :313:58
                                    %2060 = store_node(%2059, @InternPool.Index.one) node_offset:313:57 to :313:58
                                    %2061 = dbg_var_ptr(%2059, "end_of_segment")
                                    %2062 = dbg_stmt(60, 29)
                                    %2063 = alloc_inferred_mut() node_offset:314:29 to :314:93
                                    %2064 = decl_ref("strings") token_offset:314:40 to :314:47
                                    %2065 = dbg_stmt(60, 47)
                                    %2066 = field_ptr(%2064, "CodepointIterator") node_offset:314:40 to :314:65
                                    %2067 = dbg_stmt(60, 65)
                                    %2068 = dbg_stmt(60, 76)
                                    %2069 = field_call(.auto, %2066, "initOffset", [
                                      {
                                        %2070 = break_inline(%2069, %2046)
                                      },
                                      {
                                        %2071 = break_inline(%2069, @InternPool.Index.one)
                                      },
                                    ]) node_offset:314:40 to :314:93
                                    %2072 = store_to_inferred_ptr(%2063, %2069)
                                    %2073 = resolve_inferred_alloc(%2063) node_offset:314:29 to :314:93
                                    %2074 = dbg_var_ptr(%2063, "iter")
                                    %2075 = dbg_stmt(64, 29)
                                    %2076 = as_node(@InternPool.Index.usize_type, %1959) node_offset:318:47 to :318:68
                                    %2077 = dbg_stmt(64, 46)
                                    %2078 = elem_val_node(%1943, %2076) node_offset:318:37 to :318:69
                                    %2079 = dbg_stmt(64, 37)
                                    %2081 = block_comptime({
                                      %2082 = int(39)
                                      %2083 = break(%2081, %2082)
                                    }) node_offset:319:33 to :319:37
                                    %2099 = block_comptime({
                                      %2100 = int(34)
                                      %2101 = break(%2099, %2100)
                                    }) node_offset:322:33 to :322:36
                                    %2117 = block_comptime({
                                      %2118 = int(60)
                                      %2119 = break(%2117, %2118)
                                    }) node_offset:325:33 to :325:36
                                    %2135 = block_comptime({
                                      %2136 = int(96)
                                      %2137 = break(%2135, %2136)
                                    }) node_offset:328:33 to :328:36
                                    %2080 = switch_block(%2078,
                                      else => {
                                        %2153 = dbg_block_begin()
                                        %2154 = block({
                                          %2155 = restore_err_ret_index(%2154, %4294967211)
                                          %2156 = break(%2154, @InternPool.Index.void_value)
                                        }) node_offset:331:41 to :331:43
                                        %2157 = dbg_block_end()
                                        %2158 = break(%2080, @InternPool.Index.void_value)
                                      },
                                      %2081 => {
                                        %2084 = dbg_block_begin()
                                        %2085 = block({
                                          %2086 = dbg_block_begin()
                                          %2087 = dbg_stmt(66, 37)
                                          %2088 = dbg_stmt(66, 58)
                                          %2089 = dbg_stmt(66, 84)
                                          %2090 = field_call(.auto, %2063, "scanUntilQuotedValueOrEOF", [
                                            {
                                              %2091 = int(39)
                                              %2092 = break_inline(%2090, %2091)
                                            },
                                          ]) node_offset:320:54 to :320:90
                                          %2093 = store_node(%2059, %2090) node_offset:320:37 to :320:90
                                          %2094 = dbg_block_end()
                                          %2095 = restore_err_ret_index(%2085, %4294967211)
                                          %2096 = break(%2085, @InternPool.Index.void_value)
                                        }) node_offset:319:41 to :319:42
                                        %2097 = dbg_block_end()
                                        %2098 = break(%2080, @InternPool.Index.void_value)
                                      },
                                      %2099 => {
                                        %2102 = dbg_block_begin()
                                        %2103 = block({
                                          %2104 = dbg_block_begin()
                                          %2105 = dbg_stmt(69, 37)
                                          %2106 = dbg_stmt(69, 58)
                                          %2107 = dbg_stmt(69, 84)
                                          %2108 = field_call(.auto, %2063, "scanUntilQuotedValueOrEOF", [
                                            {
                                              %2109 = int(34)
                                              %2110 = break_inline(%2108, %2109)
                                            },
                                          ]) node_offset:323:54 to :323:89
                                          %2111 = store_node(%2059, %2108) node_offset:323:37 to :323:89
                                          %2112 = dbg_block_end()
                                          %2113 = restore_err_ret_index(%2103, %4294967211)
                                          %2114 = break(%2103, @InternPool.Index.void_value)
                                        }) node_offset:322:40 to :322:41
                                        %2115 = dbg_block_end()
                                        %2116 = break(%2080, @InternPool.Index.void_value)
                                      },
                                      %2117 => {
                                        %2120 = dbg_block_begin()
                                        %2121 = block({
                                          %2122 = dbg_block_begin()
                                          %2123 = dbg_stmt(72, 37)
                                          %2124 = dbg_stmt(72, 58)
                                          %2125 = dbg_stmt(72, 84)
                                          %2126 = field_call(.auto, %2063, "scanUntilQuotedValueOrEOF", [
                                            {
                                              %2127 = int(62)
                                              %2128 = break_inline(%2126, %2127)
                                            },
                                          ]) node_offset:326:54 to :326:89
                                          %2129 = store_node(%2059, %2126) node_offset:326:37 to :326:89
                                          %2130 = dbg_block_end()
                                          %2131 = restore_err_ret_index(%2121, %4294967211)
                                          %2132 = break(%2121, @InternPool.Index.void_value)
                                        }) node_offset:325:40 to :325:41
                                        %2133 = dbg_block_end()
                                        %2134 = break(%2080, @InternPool.Index.void_value)
                                      },
                                      %2135 => {
                                        %2138 = dbg_block_begin()
                                        %2139 = block({
                                          %2140 = dbg_block_begin()
                                          %2141 = dbg_stmt(75, 37)
                                          %2142 = dbg_stmt(75, 58)
                                          %2143 = dbg_stmt(75, 84)
                                          %2144 = field_call(.auto, %2063, "scanUntilQuotedValueOrEOF", [
                                            {
                                              %2145 = int(96)
                                              %2146 = break_inline(%2144, %2145)
                                            },
                                          ]) node_offset:329:54 to :329:89
                                          %2147 = store_node(%2059, %2144) node_offset:329:37 to :329:89
                                          %2148 = dbg_block_end()
                                          %2149 = restore_err_ret_index(%2139, %4294967211)
                                          %2150 = break(%2139, @InternPool.Index.void_value)
                                        }) node_offset:328:40 to :328:41
                                        %2151 = dbg_block_end()
                                        %2152 = break(%2080, @InternPool.Index.void_value)
                                      }) node_offset:318:29 to :318:35
                                    %2159 = ensure_result_used(%2080) node_offset:318:29 to :318:35
                                    %2160 = dbg_stmt(79, 29)
                                    %2161 = ref(%1641) token_offset:333:33 to :333:35
                                    %2162 = dbg_stmt(79, 35)
                                    %2163 = dbg_stmt(79, 44)
                                    %2164 = field_call(.auto, %2161, "writeAll", [
                                      {
                                        %2166 = load(%2059) node_offset:333:61 to :333:75
                                        %2167 = dbg_stmt(79, 57)
                                        %2168 = slice_end(%2165, @InternPool.Index.zero, %2166) node_offset:333:45 to :333:76
                                        %2169 = break_inline(%2164, %2168)
                                      },
                                    ]) node_offset:333:33 to :333:77
                                    %2170 = try(%2164, {
                                      %2171 = err_union_code(%2164) node_offset:333:29 to :333:77
                                      %2172 = dbg_stmt(79, 29)
                                      %2173 = ret_node(%2171) node_offset:333:29 to :333:77
                                    }) node_offset:333:29 to :333:77
                                    %2174 = ensure_result_used(%2170) node_offset:333:29 to :333:77
                                    %2175 = dbg_stmt(80, 33)
                                    %2178 = block({
                                      %2176 = as_node(@InternPool.Index.bool_type, %2001) node_offset:334:33 to :334:43
                                      %2177 = condbr(%2176, {
                                        %2179 = dbg_block_begin()
                                        %2180 = block({
                                          %2181 = dbg_block_begin()
                                          %2182 = dbg_stmt(81, 33)
                                          %2183 = ref(%1641) token_offset:335:37 to :335:39
                                          %2184 = dbg_stmt(81, 39)
                                          %2185 = dbg_stmt(81, 48)
                                          %2186 = field_call(.auto, %2183, "writeAll", [
                                            {
                                              %2187 = str("\x1b[0m")
                                              %2188 = break_inline(%2186, %2187)
                                            },
                                          ]) node_offset:335:37 to :335:59
                                          %2189 = try(%2186, {
                                            %2190 = err_union_code(%2186) node_offset:335:33 to :335:59
                                            %2191 = dbg_stmt(81, 33)
                                            %2192 = ret_node(%2190) node_offset:335:33 to :335:59
                                          }) node_offset:335:33 to :335:59
                                          %2193 = ensure_result_used(%2189) node_offset:335:33 to :335:59
                                          %2194 = dbg_block_end()
                                          %2195 = restore_err_ret_index(%2180, %4294967211)
                                          %2196 = break(%2180, @InternPool.Index.void_value)
                                        }) node_offset:334:45 to :334:46
                                        %2197 = dbg_block_end()
                                        %2198 = break(%2178, @InternPool.Index.void_value)
                                      }, {
                                        %2199 = break(%2178, @InternPool.Index.void_value)
                                      }) node_offset:334:29 to :334:31
                                    }) node_offset:334:29 to :334:31
                                    %2200 = ensure_result_used(%2178) node_offset:334:29 to :334:31
                                    %2201 = dbg_stmt(84, 29)
                                    %2202 = ref(%1641) token_offset:338:33 to :338:35
                                    %2203 = dbg_stmt(84, 35)
                                    %2204 = dbg_stmt(84, 44)
                                    %2205 = field_call(.auto, %2202, "writeAll", [
                                      {
                                        %2206 = load(%2059) node_offset:338:58 to :338:72
                                        %2207 = dbg_stmt(84, 57)
                                        %2208 = slice_start(%2165, %2206) node_offset:338:45 to :338:75
                                        %2209 = break_inline(%2205, %2208)
                                      },
                                    ]) node_offset:338:33 to :338:76
                                    %2210 = try(%2205, {
                                      %2211 = err_union_code(%2205) node_offset:338:29 to :338:76
                                      %2212 = dbg_stmt(84, 29)
                                      %2213 = ret_node(%2211) node_offset:338:29 to :338:76
                                    }) node_offset:338:29 to :338:76
                                    %2214 = ensure_result_used(%2210) node_offset:338:29 to :338:76
                                    %2215 = dbg_block_end()
                                    %2216 = restore_err_ret_index(%2056, %4294967211)
                                    %2217 = break(%2056, @InternPool.Index.void_value)
                                  }) node_offset:312:51 to :312:52
                                  %2218 = dbg_block_end()
                                  %2246 = break(%2054, @InternPool.Index.void_value)
                                }, {
                                  %2219 = dbg_block_begin()
                                  %2223 = block({
                                    %2220 = dbg_stmt(85, 36)
                                    %2221 = as_node(@InternPool.Index.bool_type, %2001) node_offset:339:36 to :339:46
                                    %2222 = condbr(%2221, {
                                      %2224 = dbg_block_begin()
                                      %2225 = block({
                                        %2226 = dbg_block_begin()
                                        %2227 = dbg_stmt(86, 29)
                                        %2228 = ref(%1641) token_offset:340:33 to :340:35
                                        %2229 = dbg_stmt(86, 35)
                                        %2230 = dbg_stmt(86, 44)
                                        %2231 = field_call(.auto, %2228, "writeAll", [
                                          {
                                            %2232 = str("\x1b[0m")
                                            %2233 = break_inline(%2231, %2232)
                                          },
                                        ]) node_offset:340:33 to :340:55
                                        %2234 = try(%2231, {
                                          %2235 = err_union_code(%2231) node_offset:340:29 to :340:55
                                          %2236 = dbg_stmt(86, 29)
                                          %2237 = ret_node(%2235) node_offset:340:29 to :340:55
                                        }) node_offset:340:29 to :340:55
                                        %2238 = ensure_result_used(%2234) node_offset:340:29 to :340:55
                                        %2239 = dbg_block_end()
                                        %2240 = restore_err_ret_index(%2225, %4294967211)
                                        %2241 = break(%2225, @InternPool.Index.void_value)
                                      }) node_offset:339:48 to :339:49
                                      %2242 = dbg_block_end()
                                      %2243 = break(%2223, @InternPool.Index.void_value)
                                    }, {
                                      %2244 = break(%2223, @InternPool.Index.void_value)
                                    }) node_offset:339:32 to :339:34
                                  }) node_offset:339:32 to :339:34
                                  %2245 = dbg_block_end()
                                  %2247 = break(%2054, %2223)
                                }) node_offset:312:25 to :312:27
                              }) node_offset:312:25 to :312:27
                              %2248 = ensure_result_used(%2054) node_offset:312:25 to :312:27
                              %2249 = dbg_block_end()
                              %2250 = restore_err_ret_index(%1996, %4294967211)
                              %2251 = break(%1996, @InternPool.Index.void_value)
                            }) node_offset:300:54 to :300:55
                            %2252 = dbg_block_end()
                            %2271 = break(%1994, @InternPool.Index.void_value)
                          }, {
                            %2253 = dbg_block_begin()
                            %2254 = block({
                              %2255 = dbg_block_begin()
                              %2256 = dbg_stmt(89, 25)
                              %2257 = ref(%1641) token_offset:343:29 to :343:31
                              %2258 = dbg_stmt(89, 31)
                              %2259 = dbg_stmt(89, 40)
                              %2260 = field_call(.auto, %2257, "writeAll", [
                                {
                                  %2261 = break_inline(%2260, %1943)
                                },
                              ]) node_offset:343:29 to :343:51
                              %2262 = try(%2260, {
                                %2263 = err_union_code(%2260) node_offset:343:25 to :343:51
                                %2264 = dbg_stmt(89, 25)
                                %2265 = ret_node(%2263) node_offset:343:25 to :343:51
                              }) node_offset:343:25 to :343:51
                              %2266 = ensure_result_used(%2262) node_offset:343:25 to :343:51
                              %2267 = dbg_block_end()
                              %2268 = restore_err_ret_index(%2254, %4294967211)
                              %2269 = break(%2254, @InternPool.Index.void_value)
                            }) node_offset:342:28 to :342:29
                            %2270 = dbg_block_end()
                            %2272 = break(%1994, @InternPool.Index.void_value)
                          }) node_offset:300:21 to :300:23
                        }) node_offset:300:21 to :300:23
                        %2273 = ensure_result_used(%1994) node_offset:300:21 to :300:23
                        %2274 = dbg_stmt(92, 21)
                        %2275 = ref(%1641) token_offset:346:25 to :346:27
                        %2276 = dbg_stmt(92, 27)
                        %2277 = dbg_stmt(92, 36)
                        %2278 = field_call(.auto, %2275, "writeAll", [
                          {
                            %2279 = str("\n")
                            %2280 = break_inline(%2278, %2279)
                          },
                        ]) node_offset:346:25 to :346:42
                        %2281 = try(%2278, {
                          %2282 = err_union_code(%2278) node_offset:346:21 to :346:42
                          %2283 = dbg_stmt(92, 21)
                          %2284 = ret_node(%2282) node_offset:346:21 to :346:42
                        }) node_offset:346:21 to :346:42
                        %2285 = ensure_result_used(%2281) node_offset:346:21 to :346:42
                        %2286 = dbg_stmt(94, 21)
                        %2287 = ref(%1641) token_offset:348:25 to :348:27
                        %2288 = dbg_stmt(94, 27)
                        %2289 = dbg_stmt(94, 43)
                        %2290 = field_call(.auto, %2287, "writeByteNTimes", [
                          {
                            %2291 = int(32)
                            %2292 = break_inline(%2290, %2291)
                          },
                          {
                            %2293 = break_inline(%2290, %1959)
                          },
                        ]) node_offset:348:25 to :348:71
                        %2294 = try(%2290, {
                          %2295 = err_union_code(%2290) node_offset:348:21 to :348:71
                          %2296 = dbg_stmt(94, 21)
                          %2297 = ret_node(%2295) node_offset:348:21 to :348:71
                        }) node_offset:348:21 to :348:71
                        %2298 = ensure_result_used(%2294) node_offset:348:21 to :348:71
                        %2299 = dbg_stmt(95, 25)
                        %2304 = block({
                          %2300 = block_comptime({
                            %2301 = break(%2300, %1646)
                          }) node_offset:349:34 to :349:52
                          %2302 = as_node(@InternPool.Index.bool_type, %2300) node_offset:349:34 to :349:52
                          %2303 = condbr(%2302, {
                            %2305 = dbg_block_begin()
                            %2306 = block({
                              %2307 = dbg_block_begin()
                              %2308 = dbg_stmt(96, 25)
                              %2309 = dbg_stmt(96, 57)
                              %2310 = field_val(%1671, "len") node_offset:350:44 to :350:61
                              %2311 = cmp_gt(%2310, @InternPool.Index.zero) node_offset:350:44 to :350:65
                              %2312 = dbg_var_val(%2311, "is_colored")
                              %2313 = dbg_stmt(97, 29)
                              %2316 = block({
                                %2314 = as_node(@InternPool.Index.bool_type, %2311) node_offset:351:29 to :351:39
                                %2315 = condbr(%2314, {
                                  %2317 = dbg_block_begin()
                                  %2318 = block({
                                    %2319 = dbg_block_begin()
                                    %2320 = dbg_stmt(98, 29)
                                    %2321 = ref(%1641) token_offset:352:33 to :352:35
                                    %2322 = dbg_stmt(98, 35)
                                    %2323 = dbg_stmt(98, 44)
                                    %2324 = field_call(.auto, %2321, "writeAll", [
                                      {
                                        %2325 = break_inline(%2324, %1671)
                                      },
                                    ]) node_offset:352:33 to :352:59
                                    %2326 = try(%2324, {
                                      %2327 = err_union_code(%2324) node_offset:352:29 to :352:59
                                      %2328 = dbg_stmt(98, 29)
                                      %2329 = ret_node(%2327) node_offset:352:29 to :352:59
                                    }) node_offset:352:29 to :352:59
                                    %2330 = ensure_result_used(%2326) node_offset:352:29 to :352:59
                                    %2331 = dbg_stmt(99, 29)
                                    %2332 = ref(%1641) token_offset:353:33 to :353:35
                                    %2333 = dbg_stmt(99, 35)
                                    %2334 = dbg_stmt(99, 44)
                                    %2335 = field_call(.auto, %2332, "writeAll", [
                                      {
                                        %2336 = break_inline(%2335, %1782)
                                      },
                                    ]) node_offset:353:33 to :353:56
                                    %2337 = try(%2335, {
                                      %2338 = err_union_code(%2335) node_offset:353:29 to :353:56
                                      %2339 = dbg_stmt(99, 29)
                                      %2340 = ret_node(%2338) node_offset:353:29 to :353:56
                                    }) node_offset:353:29 to :353:56
                                    %2341 = ensure_result_used(%2337) node_offset:353:29 to :353:56
                                    %2342 = dbg_stmt(101, 29)
                                    %2343 = ref(%1641) token_offset:355:33 to :355:35
                                    %2344 = dbg_stmt(101, 35)
                                    %2345 = dbg_stmt(101, 44)
                                    %2346 = field_call(.auto, %2343, "writeAll", [
                                      {
                                        %2347 = block_comptime({
                                          %2348 = decl_ref("Output") token_offset:355:54 to :355:60
                                          %2349 = field_ptr(%2348, "color_map") node_offset:355:54 to :355:70
                                          %2350 = dbg_stmt(101, 74)
                                          %2351 = field_call(.compile_time, %2349, "get", [
                                            {
                                              %2352 = str("b")
                                              %2353 = break_inline(%2351, %2352)
                                            },
                                          ]) node_offset:355:54 to :355:79
                                          %2354 = optional_payload_safe(%2351) node_offset:355:54 to :355:81
                                          %2355 = break(%2347, %2354)
                                        }) node_offset:355:54 to :355:81
                                        %2356 = break_inline(%2346, %2347)
                                      },
                                    ]) node_offset:355:33 to :355:82
                                    %2357 = try(%2346, {
                                      %2358 = err_union_code(%2346) node_offset:355:29 to :355:82
                                      %2359 = dbg_stmt(101, 29)
                                      %2360 = ret_node(%2358) node_offset:355:29 to :355:82
                                    }) node_offset:355:29 to :355:82
                                    %2361 = ensure_result_used(%2357) node_offset:355:29 to :355:82
                                    %2362 = dbg_block_end()
                                    %2363 = restore_err_ret_index(%2318, %4294967211)
                                    %2364 = break(%2318, @InternPool.Index.void_value)
                                  }) node_offset:351:41 to :351:42
                                  %2365 = dbg_block_end()
                                  %2366 = break(%2316, @InternPool.Index.void_value)
                                }, {
                                  %2367 = break(%2316, @InternPool.Index.void_value)
                                }) node_offset:351:25 to :351:27
                              }) node_offset:351:25 to :351:27
                              %2368 = ensure_result_used(%2316) node_offset:351:25 to :351:27
                              %2369 = dbg_stmt(104, 25)
                              %2370 = ref(%1641) token_offset:358:29 to :358:31
                              %2371 = dbg_stmt(104, 31)
                              %2372 = dbg_stmt(104, 41)
                              %2373 = field_call(.auto, %2370, "writeByte", [
                                {
                                  %2374 = int(94)
                                  %2375 = break_inline(%2373, %2374)
                                },
                              ]) node_offset:358:29 to :358:46
                              %2376 = try(%2373, {
                                %2377 = err_union_code(%2373) node_offset:358:25 to :358:46
                                %2378 = dbg_stmt(104, 25)
                                %2379 = ret_node(%2377) node_offset:358:25 to :358:46
                              }) node_offset:358:25 to :358:46
                              %2380 = ensure_result_used(%2376) node_offset:358:25 to :358:46
                              %2381 = dbg_stmt(106, 29)
                              %2384 = block({
                                %2382 = as_node(@InternPool.Index.bool_type, %2311) node_offset:360:29 to :360:39
                                %2383 = condbr(%2382, {
                                  %2385 = dbg_block_begin()
                                  %2386 = block({
                                    %2387 = dbg_block_begin()
                                    %2388 = dbg_stmt(107, 29)
                                    %2389 = ref(%1641) token_offset:361:33 to :361:35
                                    %2390 = dbg_stmt(107, 35)
                                    %2391 = dbg_stmt(107, 44)
                                    %2392 = field_call(.auto, %2389, "writeAll", [
                                      {
                                        %2393 = str("\x1b[0m\n")
                                        %2394 = break_inline(%2392, %2393)
                                      },
                                    ]) node_offset:361:33 to :361:57
                                    %2395 = try(%2392, {
                                      %2396 = err_union_code(%2392) node_offset:361:29 to :361:57
                                      %2397 = dbg_stmt(107, 29)
                                      %2398 = ret_node(%2396) node_offset:361:29 to :361:57
                                    }) node_offset:361:29 to :361:57
                                    %2399 = ensure_result_used(%2395) node_offset:361:29 to :361:57
                                    %2400 = dbg_block_end()
                                    %2401 = restore_err_ret_index(%2386, %4294967211)
                                    %2402 = break(%2386, @InternPool.Index.void_value)
                                  }) node_offset:360:41 to :360:42
                                  %2403 = dbg_block_end()
                                  %2404 = break(%2384, @InternPool.Index.void_value)
                                }, {
                                  %2405 = break(%2384, @InternPool.Index.void_value)
                                }) node_offset:360:25 to :360:27
                              }) node_offset:360:25 to :360:27
                              %2406 = ensure_result_used(%2384) node_offset:360:25 to :360:27
                              %2407 = dbg_block_end()
                              %2408 = restore_err_ret_index(%2306, %4294967211)
                              %2409 = break(%2306, @InternPool.Index.void_value)
                            }) node_offset:349:54 to :349:55
                            %2410 = dbg_block_end()
                            %2430 = break(%2304, @InternPool.Index.void_value)
                          }, {
                            %2411 = dbg_block_begin()
                            %2412 = block({
                              %2413 = dbg_block_begin()
                              %2414 = dbg_stmt(110, 25)
                              %2415 = ref(%1641) token_offset:364:29 to :364:31
                              %2416 = dbg_stmt(110, 31)
                              %2417 = dbg_stmt(110, 40)
                              %2418 = field_call(.auto, %2415, "writeAll", [
                                {
                                  %2419 = str("^\n")
                                  %2420 = break_inline(%2418, %2419)
                                },
                              ]) node_offset:364:29 to :364:47
                              %2421 = try(%2418, {
                                %2422 = err_union_code(%2418) node_offset:364:25 to :364:47
                                %2423 = dbg_stmt(110, 25)
                                %2424 = ret_node(%2422) node_offset:364:25 to :364:47
                              }) node_offset:364:25 to :364:47
                              %2425 = ensure_result_used(%2421) node_offset:364:25 to :364:47
                              %2426 = dbg_block_end()
                              %2427 = restore_err_ret_index(%2412, %4294967211)
                              %2428 = break(%2412, @InternPool.Index.void_value)
                            }) node_offset:363:28 to :363:29
                            %2429 = dbg_block_end()
                            %2431 = break(%2304, @InternPool.Index.void_value)
                          }) node_offset:349:21 to :349:23
                        }) node_offset:349:21 to :349:23
                        %2432 = ensure_result_used(%2304) node_offset:349:21 to :349:23
                        %2433 = dbg_block_end()
                        %2434 = restore_err_ret_index(%1987, %4294967211)
                        %2435 = break(%1987, @InternPool.Index.void_value)
                      }) node_offset:299:35 to :299:36
                      %2436 = dbg_block_end()
                      %2437 = break(%1985, @InternPool.Index.void_value)
                    }, {
                      %2438 = break(%1985, @InternPool.Index.void_value)
                    }) node_offset:299:17 to :299:19
                  }) node_offset:299:17 to :299:19
                  %2439 = ensure_result_used(%1985) node_offset:299:17 to :299:19
                  %2440 = dbg_block_end()
                  %2441 = restore_err_ret_index(%1934, %4294967211)
                  %2442 = break(%1934, @InternPool.Index.void_value)
                }) node_offset:293:50 to :293:51
                %2443 = dbg_block_end()
                %2444 = break(%1930, @InternPool.Index.void_value)
              }, {
                %2445 = break(%1930, @InternPool.Index.void_value)
              }) node_offset:293:13 to :293:15
            }) node_offset:293:13 to :293:15
            %2446 = ensure_result_used(%1930) node_offset:293:13 to :293:15
            %2447 = dbg_stmt(115, 17)
            %2455 = block({
              %2448 = dbg_stmt(115, 25)
              %2449 = field_val(%1921, "file") node_offset:369:17 to :369:30
              %2450 = dbg_stmt(115, 30)
              %2451 = field_val(%2449, "len") node_offset:369:17 to :369:34
              %2452 = cmp_gt(%2451, @InternPool.Index.zero) node_offset:369:17 to :369:38
              %2453 = as_node(@InternPool.Index.bool_type, %2452) node_offset:369:17 to :369:38
              %2454 = condbr(%2453, {
                %2456 = dbg_block_begin()
                %2457 = block({
                  %2458 = dbg_block_begin()
                  %2459 = dbg_stmt(116, 21)
                  %2464 = block({
                    %2460 = block_comptime({
                      %2461 = break(%2460, %1646)
                    }) node_offset:370:30 to :370:48
                    %2462 = as_node(@InternPool.Index.bool_type, %2460) node_offset:370:30 to :370:48
                    %2463 = condbr(%2462, {
                      %2465 = dbg_block_begin()
                      %2466 = block({
                        %2467 = dbg_block_begin()
                        %2468 = dbg_stmt(117, 25)
                        %2479 = block({
                          %2469 = as_node(@InternPool.Index.bool_type, %1648) node_offset:371:26 to :371:33
                          %2470 = bool_not(%2469) node_offset:371:25 to :371:33
                          %2471 = as_node(@InternPool.Index.bool_type, %2470) node_offset:371:25 to :371:33
                          %2472 = bool_br_and(%2471, {
                            %2473 = enum_literal("err") token_offset:371:47 to :371:50
                            %2474 = cmp_eq(%1644, %2473) node_offset:371:38 to :371:50
                            %2475 = as_node(@InternPool.Index.bool_type, %2474) node_offset:371:38 to :371:50
                            %2476 = break_inline(%2472, %2475)
                          }
                          %2477 = as_node(@InternPool.Index.bool_type, %2472) node_offset:371:25 to :371:50
                          %2478 = condbr(%2477, {
                            %2480 = dbg_block_begin()
                            %2481 = block({
                              %2482 = dbg_block_begin()
                              %2483 = dbg_stmt(118, 25)
                              %2484 = ref(%1641) token_offset:372:29 to :372:31
                              %2485 = dbg_stmt(118, 31)
                              %2486 = dbg_stmt(118, 40)
                              %2487 = field_call(.auto, %2484, "writeAll", [
                                {
                                  %2488 = block_comptime({
                                    %2489 = decl_ref("Output") token_offset:372:50 to :372:56
                                    %2490 = field_ptr(%2489, "color_map") node_offset:372:50 to :372:66
                                    %2491 = dbg_stmt(118, 70)
                                    %2492 = field_call(.compile_time, %2490, "get", [
                                      {
                                        %2493 = str("b")
                                        %2494 = break_inline(%2492, %2493)
                                      },
                                    ]) node_offset:372:50 to :372:75
                                    %2495 = optional_payload_safe(%2492) node_offset:372:50 to :372:77
                                    %2496 = break(%2488, %2495)
                                  }) node_offset:372:50 to :372:77
                                  %2497 = break_inline(%2487, %2488)
                                },
                              ]) node_offset:372:29 to :372:78
                              %2498 = try(%2487, {
                                %2499 = err_union_code(%2487) node_offset:372:25 to :372:78
                                %2500 = dbg_stmt(118, 25)
                                %2501 = ret_node(%2499) node_offset:372:25 to :372:78
                              }) node_offset:372:25 to :372:78
                              %2502 = ensure_result_used(%2498) node_offset:372:25 to :372:78
                              %2503 = dbg_block_end()
                              %2504 = restore_err_ret_index(%2481, %4294967211)
                              %2505 = break(%2481, @InternPool.Index.void_value)
                            }) node_offset:371:52 to :371:53
                            %2506 = dbg_block_end()
                            %2512 = break(%2479, @InternPool.Index.void_value)
                          }, {
                            %2507 = dbg_block_begin()
                            %2508 = block({
                              %2509 = restore_err_ret_index(%2508, %4294967211)
                              %2510 = break(%2508, @InternPool.Index.void_value)
                            }) node_offset:373:28 to :373:30
                            %2511 = dbg_block_end()
                            %2513 = break(%2479, @InternPool.Index.void_value)
                          }) node_offset:371:21 to :371:23
                        }) node_offset:371:21 to :371:23
                        %2514 = ensure_result_used(%2479) node_offset:371:21 to :371:23
                        %2515 = dbg_block_end()
                        %2516 = restore_err_ret_index(%2466, %4294967211)
                        %2517 = break(%2466, @InternPool.Index.void_value)
                      }) node_offset:370:50 to :370:51
                      %2518 = dbg_block_end()
                      %2519 = break(%2464, @InternPool.Index.void_value)
                    }, {
                      %2520 = break(%2464, @InternPool.Index.void_value)
                    }) node_offset:370:17 to :370:19
                  }) node_offset:370:17 to :370:19
                  %2521 = ensure_result_used(%2464) node_offset:370:17 to :370:19
                  %2522 = dbg_stmt(122, 17)
                  %2523 = decl_ref("std") token_offset:376:21 to :376:24
                  %2524 = dbg_stmt(122, 24)
                  %2525 = field_ptr(%2523, "fmt") node_offset:376:21 to :376:28
                  %2526 = dbg_stmt(122, 28)
                  %2527 = dbg_stmt(122, 35)
                  %2528 = field_call(.auto, %2525, "format", [
                    {
                      %2529 = break_inline(%2528, %1641)
                    },
                    {
                      %2530 = block_comptime({
                        %2531 = decl_ref("Output") token_offset:376:49 to :376:55
                        %2532 = dbg_stmt(122, 65)
                        %2533 = field_call(.compile_time, %2531, "prettyFmt", [
                          {
                            %2534 = str("{s}<r>")
                            %2535 = break_inline(%2533, %2534)
                          },
                          {
                            %2536 = break_inline(%2533, %1646)
                          },
                        ]) node_offset:376:49 to :376:95
                        %2537 = break(%2530, %2533)
                      }) node_offset:376:49 to :376:95
                      %2538 = break_inline(%2528, %2530)
                    },
                    {
                      %2539 = dbg_stmt(123, 29)
                      %2540 = field_val(%1921, "file") node_offset:377:21 to :377:34
                      %2541 = array_init_anon({%2540}) node_offset:376:97 to :376:99
                      %2542 = break_inline(%2528, %2541)
                    },
                  ]) node_offset:376:21 to :376:36
                  %2543 = try(%2528, {
                    %2544 = err_union_code(%2528) node_offset:376:17 to :376:20
                    %2545 = dbg_stmt(122, 17)
                    %2546 = ret_node(%2544) node_offset:376:17 to :376:20
                  }) node_offset:376:17 to :376:20
                  %2547 = ensure_result_used(%2543) node_offset:376:17 to :376:20
                  %2548 = dbg_stmt(126, 21)
                  %2563 = block({
                    %2549 = dbg_stmt(126, 29)
                    %2550 = field_val(%1921, "line") node_offset:380:21 to :380:34
                    %2551 = negate(@InternPool.Index.one) node_offset:380:37 to :380:39
                    %2552 = cmp_gt(%2550, %2551) node_offset:380:21 to :380:39
                    %2553 = as_node(@InternPool.Index.bool_type, %2552) node_offset:380:21 to :380:39
                    %2554 = bool_br_and(%2553, {
                      %2555 = dbg_stmt(126, 52)
                      %2556 = field_val(%1921, "column") node_offset:380:44 to :380:59
                      %2557 = negate(@InternPool.Index.one) node_offset:380:62 to :380:64
                      %2558 = cmp_gt(%2556, %2557) node_offset:380:44 to :380:64
                      %2559 = as_node(@InternPool.Index.bool_type, %2558) node_offset:380:44 to :380:64
                      %2560 = break_inline(%2554, %2559)
                    }
                    %2561 = as_node(@InternPool.Index.bool_type, %2554) node_offset:380:21 to :380:64
                    %2562 = condbr(%2561, {
                      %2564 = dbg_block_begin()
                      %2565 = block({
                        %2566 = dbg_block_begin()
                        %2567 = dbg_stmt(127, 21)
                        %2568 = decl_ref("std") token_offset:381:25 to :381:28
                        %2569 = dbg_stmt(127, 28)
                        %2570 = field_ptr(%2568, "fmt") node_offset:381:25 to :381:32
                        %2571 = dbg_stmt(127, 32)
                        %2572 = dbg_stmt(127, 39)
                        %2573 = field_call(.auto, %2570, "format", [
                          {
                            %2574 = break_inline(%2573, %1641)
                          },
                          {
                            %2575 = block_comptime({
                              %2576 = decl_ref("Output") token_offset:381:53 to :381:59
                              %2577 = dbg_stmt(127, 69)
                              %2578 = field_call(.compile_time, %2576, "prettyFmt", [
                                {
                                  %2579 = str("<d>:<r><yellow>{d}<r><d>:<r><yellow>{d}<r> <d>{d}<r>")
                                  %2580 = break_inline(%2578, %2579)
                                },
                                {
                                  %2581 = break_inline(%2578, %1646)
                                },
                              ]) node_offset:381:53 to :381:145
                              %2582 = break(%2575, %2578)
                            }) node_offset:381:53 to :381:145
                            %2583 = break_inline(%2573, %2575)
                          },
                          {
                            %2584 = dbg_stmt(128, 33)
                            %2585 = field_val(%1921, "line") node_offset:382:25 to :382:38
                            %2586 = dbg_stmt(129, 33)
                            %2587 = field_val(%1921, "column") node_offset:383:25 to :383:40
                            %2588 = dbg_stmt(130, 33)
                            %2589 = field_val(%1921, "offset") node_offset:384:25 to :384:40
                            %2590 = array_init_anon({%2585, %2587, %2589}) node_offset:381:147 to :381:149
                            %2591 = break_inline(%2573, %2590)
                          },
                        ]) node_offset:381:25 to :381:40
                        %2592 = try(%2573, {
                          %2593 = err_union_code(%2573) node_offset:381:21 to :381:24
                          %2594 = dbg_stmt(127, 21)
                          %2595 = ret_node(%2593) node_offset:381:21 to :381:24
                        }) node_offset:381:21 to :381:24
                        %2596 = ensure_result_used(%2592) node_offset:381:21 to :381:24
                        %2597 = dbg_block_end()
                        %2598 = restore_err_ret_index(%2565, %4294967211)
                        %2599 = break(%2565, @InternPool.Index.void_value)
                      }) node_offset:380:66 to :380:67
                      %2600 = dbg_block_end()
                      %2648 = break(%2563, @InternPool.Index.void_value)
                    }, {
                      %2601 = dbg_block_begin()
                      %2609 = block({
                        %2602 = dbg_stmt(132, 28)
                        %2603 = dbg_stmt(132, 36)
                        %2604 = field_val(%1921, "line") node_offset:386:28 to :386:41
                        %2605 = negate(@InternPool.Index.one) node_offset:386:44 to :386:46
                        %2606 = cmp_gt(%2604, %2605) node_offset:386:28 to :386:46
                        %2607 = as_node(@InternPool.Index.bool_type, %2606) node_offset:386:28 to :386:46
                        %2608 = condbr(%2607, {
                          %2610 = dbg_block_begin()
                          %2611 = block({
                            %2612 = dbg_block_begin()
                            %2613 = dbg_stmt(133, 21)
                            %2614 = decl_ref("std") token_offset:387:25 to :387:28
                            %2615 = dbg_stmt(133, 28)
                            %2616 = field_ptr(%2614, "fmt") node_offset:387:25 to :387:32
                            %2617 = dbg_stmt(133, 32)
                            %2618 = dbg_stmt(133, 39)
                            %2619 = field_call(.auto, %2616, "format", [
                              {
                                %2620 = break_inline(%2619, %1641)
                              },
                              {
                                %2621 = block_comptime({
                                  %2622 = decl_ref("Output") token_offset:387:53 to :387:59
                                  %2623 = dbg_stmt(133, 69)
                                  %2624 = field_call(.compile_time, %2622, "prettyFmt", [
                                    {
                                      %2625 = str("<d>:<r><yellow>{d}<r> <d>{d}<r>")
                                      %2626 = break_inline(%2624, %2625)
                                    },
                                    {
                                      %2627 = break_inline(%2624, %1646)
                                    },
                                  ]) node_offset:387:53 to :387:124
                                  %2628 = break(%2621, %2624)
                                }) node_offset:387:53 to :387:124
                                %2629 = break_inline(%2619, %2621)
                              },
                              {
                                %2630 = dbg_stmt(134, 33)
                                %2631 = field_val(%1921, "line") node_offset:388:25 to :388:38
                                %2632 = dbg_stmt(135, 33)
                                %2633 = field_val(%1921, "offset") node_offset:389:25 to :389:40
                                %2634 = array_init_anon({%2631, %2633}) node_offset:387:126 to :387:128
                                %2635 = break_inline(%2619, %2634)
                              },
                            ]) node_offset:387:25 to :387:40
                            %2636 = try(%2619, {
                              %2637 = err_union_code(%2619) node_offset:387:21 to :387:24
                              %2638 = dbg_stmt(133, 21)
                              %2639 = ret_node(%2637) node_offset:387:21 to :387:24
                            }) node_offset:387:21 to :387:24
                            %2640 = ensure_result_used(%2636) node_offset:387:21 to :387:24
                            %2641 = dbg_block_end()
                            %2642 = restore_err_ret_index(%2611, %4294967211)
                            %2643 = break(%2611, @InternPool.Index.void_value)
                          }) node_offset:386:48 to :386:49
                          %2644 = dbg_block_end()
                          %2645 = break(%2609, @InternPool.Index.void_value)
                        }, {
                          %2646 = break(%2609, @InternPool.Index.void_value)
                        }) node_offset:386:24 to :386:26
                      }) node_offset:386:24 to :386:26
                      %2647 = dbg_block_end()
                      %2649 = break(%2563, %2609)
                    }) node_offset:380:17 to :380:19
                  }) node_offset:380:17 to :380:19
                  %2650 = ensure_result_used(%2563) node_offset:380:17 to :380:19
                  %2651 = dbg_block_end()
                  %2652 = restore_err_ret_index(%2457, %4294967211)
                  %2653 = break(%2457, @InternPool.Index.void_value)
                }) node_offset:369:40 to :369:41
                %2654 = dbg_block_end()
                %2655 = break(%2455, @InternPool.Index.void_value)
              }, {
                %2656 = break(%2455, @InternPool.Index.void_value)
              }) node_offset:369:13 to :369:15
            }) node_offset:369:13 to :369:15
            %2657 = ensure_result_used(%2455) node_offset:369:13 to :369:15
            %2658 = dbg_block_end()
            %2659 = restore_err_ret_index(%1923, %4294967211)
            %2660 = break(%1923, @InternPool.Index.void_value)
          }) node_offset:292:39 to :292:40
          %2661 = dbg_block_end()
          %2662 = break(%1919, @InternPool.Index.void_value)
        }, {
          %2663 = break(%1919, @InternPool.Index.void_value)
        }) node_offset:292:9 to :292:11
      }) node_offset:292:9 to :292:11
      %2664 = ensure_result_used(%1919) node_offset:292:9 to :292:11
      %2665 = dbg_block_end()
      %2666 = restore_err_ret_index(%1649, %4294967211)
      %2667 = break(%1649, @InternPool.Index.void_value)
    For full context, use the command
      zig ast-check -t src/logger.zig

  in src/logger.zig: src/logger.zig:Data.writeFormat__anon_48000
    > %1649 = block({%1650..%2667}) node_offset:261:13 to :261:14
  in src/logger.zig: src/logger.zig:Msg.writeFormat__anon_47999
    > %3746 = try(%3739, {%3747..%3749}) node_offset:545:9 to :545:74
  in src/logger.zig: src/logger.zig:Msg.writeFormat__anon_47999
    > %3731 = block({%3732..%3810}) node_offset:544:13 to :544:14
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8442 = try(%8439, {%8443..%8445}) node_offset:1194:25 to :1194:68
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8434 = block({%8435..%8451}) node_offset:1193:59 to :1193:60
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8431 = condbr(%8430, {%8433..%8453}, {%8454}) node_offset:1193:21 to :1193:23
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8432 = block({%8422..%8431}) node_offset:1193:21 to :1193:23
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8418 = block({%8419..%8458}) node_offset:1192:39 to :1192:40
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8415 = condbr(%8414, {%8417..%8460}, {%8461}) node_offset:1192:17 to :1192:19
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8416 = block({%8410..%8415}) node_offset:1192:17 to :1192:19
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8407 = block({%8408..%8465}) node_offset:1191:41 to :1191:42
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8399 = condbr(%8398, {%8404..%8467}, {%8468}) node_offset:1191:13 to :1191:16
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8400 = block({%8398, %8399}) node_offset:1191:13 to :1191:16
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8396 = loop({%8397..%8403}) node_offset:1191:13 to :1191:16
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8386 = block({%8387..%8554}) node_offset:1184:52 to :1184:53
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8383 = condbr(%8382, {%8385..%8627}, {%8556..%8628}) node_offset:1184:9 to :1184:11
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8384 = block({%8372..%8383}) node_offset:1184:9 to :1184:11
  in src/logger.zig: src/logger.zig:Log.printForLogLevelWithEnableAnsiColors__anon_47998
    > %8364 = block({%8365..%8654}) node_offset:1181:115 to :1181:116
  in src/bun_js.zig: src/bun_js.zig:Run.bootStandalone
    > %623 = is_non_err(%616) node_offset:105:17 to :105:97
  in src/bun_js.zig: src/bun_js.zig:Run.bootStandalone
    > %625 = block({%612..%624}) node_offset:105:17 to :105:97
  in src/bun_js.zig: src/bun_js.zig:Run.bootStandalone
    > %609 = block({%610..%637}) node_offset:104:51 to :104:52
  in src/bun_js.zig: src/bun_js.zig:Run.bootStandalone
    > %606 = condbr(%605, {%608..%670}, {%639..%671}) node_offset:104:13 to :104:15
  in src/bun_js.zig: src/bun_js.zig:Run.bootStandalone
    > %607 = block({%602..%606}) node_offset:104:13 to :104:15
  in src/bun_js.zig: src/bun_js.zig:Run.bootStandalone
    > %599 = block({%600..%689}) node_offset:103:40 to :103:41
  in src/bun_js.zig: src/bun_js.zig:Run.bootStandalone
    > %595 = condbr(%594, {%597, %691}, {%598..%692}) node_offset:103:9 to :103:39
  in src/bun_js.zig: src/bun_js.zig:Run.bootStandalone
    > %596 = block({%590..%595}) node_offset:103:9 to :103:39
  in src/bun_js.zig: src/bun_js.zig:Run.bootStandalone
    > %163 = block({%164..%860}) node_offset:46:110 to :46:111
  in src/cli.zig: src/cli.zig:Command.start
    > %8240 = try(%8229, {%8241..%8243}) node_offset:1173:13 to :1173:16
  in src/cli.zig: src/cli.zig:Command.start
    > %8079 = block({%8080..%8250}) node_offset:1156:90 to :1156:91
  in src/cli.zig: src/cli.zig:Command.start
    > %8074 = condbr(%8073, {%8076..%8252}, {%8253}) node_offset:1156:9 to :1156:11
  in src/cli.zig: src/cli.zig:Command.start
    > %8075 = block({%8059..%8074}) node_offset:1156:9 to :1156:11
  in src/cli.zig: src/cli.zig:Command.start
    > %7943 = block({%7944..%11193}) node_offset:1117:72 to :1117:73
  in src/cli.zig: src/cli.zig:Cli.start__anon_4598
    > %248 = is_non_err(%244) node_offset:58:9 to :58:44
  in src/cli.zig: src/cli.zig:Cli.start__anon_4598
    > %250 = block({%241..%249}) node_offset:58:9 to :58:44
  in src/cli.zig: src/cli.zig:Cli.start__anon_4598
    > %197 = block({%198..%376}) node_offset:49:110 to :49:111

/home/andy/Downloads/zig/lib/std/debug.zig:344:14: 0x598c89c in assert (zig)
    if (!ok) unreachable; // assertion failure
             ^
/home/andy/Downloads/zig/src/value.zig:410:15: 0x5a933ea in toIntern (zig)
        assert(val.ip_index != .none);
              ^
/home/andy/Downloads/zig/src/value.zig:486:63: 0x5ca2e89 in getFunction (zig)
        return switch (mod.intern_pool.indexToKey(val.toIntern())) {
                                                              ^
/home/andy/Downloads/zig/src/codegen/llvm.zig:4260:33: 0x5f0c7de in lowerDeclRefValue (zig)
        if (decl.val.getFunction(mod)) |func| {
                                ^
/home/andy/Downloads/zig/src/codegen/llvm.zig:3690:68: 0x5cbc27a in lowerValue (zig)
                    .mut_decl => |mut_decl| try o.lowerDeclRefValue(ptr_ty, mut_decl.decl),
                                                                   ^
/home/andy/Downloads/zig/src/codegen/llvm.zig:4650:42: 0x665f568 in resolveValue (zig)
        const llvm_val = try o.lowerValue(tv.val.toIntern());
                                         ^
/home/andy/Downloads/zig/src/codegen/llvm.zig:4639:47: 0x665f220 in resolveInst (zig)
        const llvm_val = try self.resolveValue(.{
                                              ^
/home/andy/Downloads/zig/src/codegen/llvm.zig:5064:54: 0x66aa502 in airCall (zig)
                const llvm_arg = try self.resolveInst(arg);
                                                     ^
/home/andy/Downloads/zig/src/codegen/llvm.zig:4844:55: 0x612227b in genBody (zig)
                .call              => try self.airCall(inst, .Auto),
                                                      ^
/home/andy/Downloads/zig/src/codegen/llvm.zig:1543:19: 0x611be15 in updateFunc (zig)
        fg.genBody(air.getMainBody()) catch |err| switch (err) {
                  ^
/home/andy/Downloads/zig/src/link/Elf.zig:2583:74: 0x6126699 in updateFunc (zig)
        if (self.llvm_object) |llvm_object| return llvm_object.updateFunc(mod, func_index, air, liveness);
                                                                         ^
/home/andy/Downloads/zig/src/link.zig:577:77: 0x5e8fe63 in updateFunc (zig)
            .elf   => return @fieldParentPtr(Elf,   "base", base).updateFunc(module, func_index, air, liveness),
                                                                            ^
/home/andy/Downloads/zig/src/Module.zig:3988:37: 0x5c74472 in ensureFuncBodyAnalyzed (zig)
            comp.bin_file.updateFunc(mod, func_index, air, liveness) catch |err| switch (err) {
                                    ^
/home/andy/Downloads/zig/src/Sema.zig:30412:31: 0x680024c in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/andy/Downloads/zig/src/Sema.zig:34216:40: 0x627358b in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30751:73: 0x623ff4d in analyzeIsNonErrComptimeOnly (zig)
                    const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                        ^
/home/andy/Downloads/zig/src/Sema.zig:18004:60: 0x623ee29 in zirTry (zig)
    const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
                                                           ^
/home/andy/Downloads/zig/src/Sema.zig:1694:67: 0x5ebc378 in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirTry(block, inst);
                                                                  ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105988 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8dd94 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73a66 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30412:31: 0x680024c in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/andy/Downloads/zig/src/Sema.zig:34216:40: 0x627358b in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30751:73: 0x623ff4d in analyzeIsNonErrComptimeOnly (zig)
                    const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                        ^
/home/andy/Downloads/zig/src/Sema.zig:18004:60: 0x623ee29 in zirTry (zig)
    const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
                                                           ^
/home/andy/Downloads/zig/src/Sema.zig:1694:67: 0x5ebc378 in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirTry(block, inst);
                                                                  ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105988 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8dd94 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73a66 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30412:31: 0x680024c in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/andy/Downloads/zig/src/Sema.zig:34216:40: 0x627358b in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30751:73: 0x623ff4d in analyzeIsNonErrComptimeOnly (zig)
                    const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                        ^
/home/andy/Downloads/zig/src/Sema.zig:18004:60: 0x623ee29 in zirTry (zig)
    const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
                                                           ^
/home/andy/Downloads/zig/src/Sema.zig:1694:67: 0x5ebc378 in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirTry(block, inst);
                                                                  ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da5ce in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:17952:37: 0x623dc21 in zirCondbr (zig)
    try sema.analyzeBodyRuntimeBreak(&sub_block, then_body);
                                    ^
/home/andy/Downloads/zig/src/Sema.zig:1648:61: 0x5ebb0ba in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da5ce in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:17952:37: 0x623dc21 in zirCondbr (zig)
    try sema.analyzeBodyRuntimeBreak(&sub_block, then_body);
                                    ^
/home/andy/Downloads/zig/src/Sema.zig:1648:61: 0x5ebb0ba in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da5ce in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:17952:37: 0x623dc21 in zirCondbr (zig)
    try sema.analyzeBodyRuntimeBreak(&sub_block, then_body);
                                    ^
/home/andy/Downloads/zig/src/Sema.zig:1648:61: 0x5ebb0ba in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105988 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:5506:25: 0x623b3fe in zirLoop (zig)
    try sema.analyzeBody(&loop_block, body);
                        ^
/home/andy/Downloads/zig/src/Sema.zig:1528:68: 0x5eba07c in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirLoop(block, inst);
                                                                   ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da5ce in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:17952:37: 0x623dc21 in zirCondbr (zig)
    try sema.analyzeBodyRuntimeBreak(&sub_block, then_body);
                                    ^
/home/andy/Downloads/zig/src/Sema.zig:1648:61: 0x5ebb0ba in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105988 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8dd94 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73a66 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30412:31: 0x680024c in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/andy/Downloads/zig/src/Sema.zig:34216:40: 0x627358b in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30751:73: 0x623ff4d in analyzeIsNonErrComptimeOnly (zig)
                    const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                        ^
/home/andy/Downloads/zig/src/Sema.zig:30781:56: 0x674a37c in analyzeIsNonErr (zig)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/home/andy/Downloads/zig/src/Sema.zig:17888:32: 0x617afa2 in zirIsNonErr (zig)
    return sema.analyzeIsNonErr(block, src, operand);
                               ^
/home/andy/Downloads/zig/src/Sema.zig:1046:66: 0x5eaea10 in analyzeBodyInner (zig)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da5ce in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:17952:37: 0x623dc21 in zirCondbr (zig)
    try sema.analyzeBodyRuntimeBreak(&sub_block, then_body);
                                    ^
/home/andy/Downloads/zig/src/Sema.zig:1648:61: 0x5ebb0ba in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da5ce in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:17971:41: 0x623e5fa in zirCondbr (zig)
        try sema.analyzeBodyRuntimeBreak(&sub_block, else_body);
                                        ^
/home/andy/Downloads/zig/src/Sema.zig:1648:61: 0x5ebb0ba in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105988 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8dd94 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73a66 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30412:31: 0x680024c in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/andy/Downloads/zig/src/Sema.zig:34216:40: 0x627358b in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30751:73: 0x623ff4d in analyzeIsNonErrComptimeOnly (zig)
                    const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                        ^
/home/andy/Downloads/zig/src/Sema.zig:18004:60: 0x623ee29 in zirTry (zig)
    const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
                                                           ^
/home/andy/Downloads/zig/src/Sema.zig:1694:67: 0x5ebc378 in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirTry(block, inst);
                                                                  ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da5ce in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:17952:37: 0x623dc21 in zirCondbr (zig)
    try sema.analyzeBodyRuntimeBreak(&sub_block, then_body);
                                    ^
/home/andy/Downloads/zig/src/Sema.zig:1648:61: 0x5ebb0ba in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105988 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8dd94 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73a66 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30412:31: 0x680024c in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/andy/Downloads/zig/src/Sema.zig:34216:40: 0x627358b in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30751:73: 0x623ff4d in analyzeIsNonErrComptimeOnly (zig)
                    const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                        ^
/home/andy/Downloads/zig/src/Sema.zig:30781:56: 0x674a37c in analyzeIsNonErr (zig)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/home/andy/Downloads/zig/src/Sema.zig:17888:32: 0x617afa2 in zirIsNonErr (zig)
    return sema.analyzeIsNonErr(block, src, operand);
                               ^
/home/andy/Downloads/zig/src/Sema.zig:1046:66: 0x5eaea10 in analyzeBodyInner (zig)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc019 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243d73 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe210 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105988 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8dd94 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73a66 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Compilation.zig:3183:42: 0x5c71b20 in processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/andy/Downloads/zig/src/Compilation.zig:3120:30: 0x5ad3e83 in performAllTheWork (zig)
            try processOneJob(comp, work_item, main_progress_node);
                             ^
/home/andy/Downloads/zig/src/Compilation.zig:2067:31: 0x5acf7b1 in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/andy/Downloads/zig/src/main.zig:3451:36: 0x5afd9d6 in serve (zig)
                    try comp.update(main_progress_node);
                                   ^
/home/andy/Downloads/zig/src/main.zig:3265:22: 0x5b2d606 in buildOutputType (zig)
            try serve(
                     ^
/home/andy/Downloads/zig/src/main.zig:273:31: 0x598ea93 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .{ .build = .Obj });
                              ^
/home/andy/Downloads/zig/src/main.zig:213:20: 0x598bd05 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/andy/Downloads/zig/lib/std/start.zig:608:37: 0x598b75e in main (zig)
            const result = root.main() catch |err| {
                                    ^
???:?:?: 0x7fcc09df124d in ??? (libc.so.6)
Unwind information for `libc.so.6:0x7fcc09df124d` was not available (error.MissingDebugInfo), trace may be incomplete

???:?:?: 0x7fffbfb01227 in ??? (???)

zig build-obj bun-debug Debug native-native-gnu.2.27: error: the following command terminated unexpectedly:
/home/andy/Downloads/zig/build-release/stage4/bin/zig build-obj /home/andy/Downloads/bun/root.zig -lc -femit-bin=/home/andy/Downloads/bun/packages/debug-bun-linux-x64/bun-debug.o -fno-strip --eh-frame-hdr --emit-relocs -ffunction-sections --cache-dir /home/andy/Downloads/bun/zig-cache --global-cache-dir /home/andy/.cache/zig --name bun-debug -fno-compiler-rt -fno-stack-check -fno-omit-frame-pointer -target native-native-gnu.2.27 -mcpu haswell --mod async_io::/home/andy/Downloads/bun/src/io/io_linux.zig --mod build_options::/home/andy/Downloads/bun/zig-cache/c/2325b468e615f95258b17bc549420780/options.zig --deps async_io,build_options -I /home/andy/Downloads/bun/src/deps -I /home/andy/Downloads/bun/src/deps --main-pkg-path /home/andy/Downloads/bun --listen=- 
Build Summary: 1/3 steps succeeded; 1 failed (disable with --summary none)
obj transitive failure
└─ zig build-obj bun-debug Debug native-native-gnu.2.27 failure
error: the following build command failed with exit code 1:
/home/andy/Downloads/bun/zig-cache/o/3c8a36eddd79ba2bdcfe2d0a4d82ecd3/build /home/andy/Downloads/zig/build-release/stage4/bin/zig /home/andy/Downloads/bun /home/andy/Downloads/bun/zig-cache /home/andy/.cache/zig obj
andrewrk commented 1 year ago

Fixed with

--- a/src/value.zig
+++ b/src/value.zig
@@ -483,6 +483,7 @@ pub const Value = struct {
     }

     pub fn getFunction(val: Value, mod: *Module) ?InternPool.Key.Func {
+        if (val.ip_index != .none) return null;
         return switch (mod.intern_pool.indexToKey(val.toIntern())) {
             .func => |x| x,
             else => null,

which was a regression introduced in db33ee45b7261c9ec62a1087cfc9377bc4e7aa8f.

With this fixed, there is another issue:

Semantic Analysis [7543] thread 870788 panic: reached unreachable code
Analyzing src/install/install.zig: src/install/install.zig:PackageManager.install
      %42723 = dbg_block_begin()
      %42724 = dbg_stmt(4, 17)
      %42725 = ret_ptr() 
      %42726 = decl_val("add") 
      %42727 = dbg_stmt(4, 27)
      %42728 = call(.auto, %42726, [
        {
          %42729 = break_inline(%42728, %42694)
        },
      ]) 
      %42730 = store_node(%42725, %42728) 
      %42731 = dbg_stmt(4, 17)
      %42732 = load(%42725) 
    > %42733 = restore_err_ret_index(%4294967211, %42732)
      %42734 = ret_load(%42725) 
      %42735 = dbg_block_end()
      %42736 = restore_err_ret_index(%42722, %4294967211)
      %42737 = break(%42722, @InternPool.Index.void_value)
    For full context, use the command
      zig ast-check -t src/install/install.zig

  in src/install/install.zig: src/install/install.zig:PackageManager.install
    > %42722 = block({%42723..%42737}) 
  in src/install/install.zig: src/install/install.zig:PackageManager.install
    > %42719 = condbr(%42718, {%42721..%42739}, {%42740}) 
  in src/install/install.zig: src/install/install.zig:PackageManager.install
    > %42720 = block({%42716..%42719}) 
  in src/install/install.zig: src/install/install.zig:PackageManager.install
    > %42713 = block({%42714..%42750}) 
  in src/install/install.zig: src/install/install.zig:PackageManager.install
    > %42707 = condbr(%42706, {%42709, %42753}, {%42711..%42754}) 
  in src/install/install.zig: src/install/install.zig:PackageManager.install
    > %42708 = block({%42699..%42707}) 
  in src/install/install.zig: src/install/install.zig:PackageManager.install
    > %42695 = block({%42696..%42900}) 
  in src/cli/install_command.zig: src/cli/install_command.zig:InstallCommand.exec
    > %22 = field_call(.auto, %19, "install", [
        {%23},
      ]) 
  in src/cli/install_command.zig: src/cli/install_command.zig:InstallCommand.exec
    > %16 = block({%17..%31}) 
  in src/cli.zig: src/cli.zig:Command.start
    > %8567 = try(%8565, {%8568..%8570}) 
  in src/cli.zig: src/cli.zig:Command.start
    > %8516 = block({%8517..%8577}) 
  in src/cli.zig: src/cli.zig:Command.start
    > %8341 = switch_block(%8259,
        else => {%11186..%11189},
        %8342 => {%8343..%8404},
        %8405 => {%8406..%8467},
        %8468 => {%8469..%8513},
        %8514 => {%8515..%8579},
        %8580 => {%8581..%8645},
        %8646 => {%8647..%8711},
        %8712 => {%8713..%8777},
        %8778 => {%8779..%8843},
        %8844 => {%8845..%8909},
        %8910 => {%8911..%8975},
        %8976 => {%8977..%9041},
        %9042 => {%9043..%9962},
        %9963 => {%9964..%10194},
        %10195 => {%10196..%10298},
        %10299 => {%10300..%10364},
        %10365 => {%10366..%11185}) 
  in src/cli.zig: src/cli.zig:Command.start
    > %7943 = block({%7944..%11193}) 
  in src/cli.zig: src/cli.zig:Cli.start__anon_4598
    > %248 = is_non_err(%244) 
  in src/cli.zig: src/cli.zig:Cli.start__anon_4598
    > %250 = block({%241..%249}) 
  in src/cli.zig: src/cli.zig:Cli.start__anon_4598
    > %197 = block({%198..%376}) 

/home/andy/Downloads/zig/src/Sema.zig:30758:21: 0x6240520 in analyzeIsNonErrComptimeOnly (zig)
            else => unreachable,
                    ^
/home/andy/Downloads/zig/src/Sema.zig:30781:56: 0x674a42c in analyzeIsNonErr (zig)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/home/andy/Downloads/zig/src/Sema.zig:6423:53: 0x6736257 in popErrorReturnTrace (zig)
        is_non_error_inst = try sema.analyzeIsNonErr(block, src, operand);
                                                    ^
/home/andy/Downloads/zig/src/Sema.zig:18386:36: 0x623a743 in zirRestoreErrRetIndex (zig)
    return sema.popErrorReturnTrace(start_block, src, operand, saved_index);
                                   ^
/home/andy/Downloads/zig/src/Sema.zig:1468:47: 0x5eb9a48 in analyzeBodyInner (zig)
                try sema.zirRestoreErrRetIndex(block, inst);
                                              ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da67e in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:17952:37: 0x623dcd1 in zirCondbr (zig)
    try sema.analyzeBodyRuntimeBreak(&sub_block, then_body);
                                    ^
/home/andy/Downloads/zig/src/Sema.zig:1648:61: 0x5ebb16a in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da67e in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:17971:41: 0x623e6aa in zirCondbr (zig)
        try sema.analyzeBodyRuntimeBreak(&sub_block, else_body);
                                        ^
/home/andy/Downloads/zig/src/Sema.zig:1648:61: 0x5ebb16a in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105a38 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:7123:33: 0x67318e0 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/andy/Downloads/zig/src/Sema.zig:6640:32: 0x616aa5c in zirCall__anon_142025 (zig)
        return sema.analyzeCall(block, func, func_ty, callee_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src, call_dbg_node);
                               ^
/home/andy/Downloads/zig/src/Sema.zig:1003:62: 0x5eac8a1 in analyzeBodyInner (zig)
            .field_call                   => try sema.zirCall(block, inst, .field),
                                                             ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105a38 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8de44 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73aa6 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30412:31: 0x68002fc in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/andy/Downloads/zig/src/Sema.zig:34216:40: 0x627363b in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30751:73: 0x623fffd in analyzeIsNonErrComptimeOnly (zig)
                    const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                        ^
/home/andy/Downloads/zig/src/Sema.zig:18004:60: 0x623eed9 in zirTry (zig)
    const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
                                                           ^
/home/andy/Downloads/zig/src/Sema.zig:1694:67: 0x5ebc428 in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirTry(block, inst);
                                                                  ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67da67e in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:10185:52: 0x676c311 in analyzeProngRuntime (zig)
                return sema.analyzeBodyRuntimeBreak(case_block, prong_body);
                                                   ^
/home/andy/Downloads/zig/src/Sema.zig:11533:40: 0x619029f in zirSwitchBlock (zig)
            try spa.analyzeProngRuntime(
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:1069:69: 0x5eafcd1 in analyzeBodyInner (zig)
            .switch_block                 => try sema.zirSwitchBlock(block, inst, false),
                                                                    ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105a38 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8de44 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73aa6 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30412:31: 0x68002fc in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/andy/Downloads/zig/src/Sema.zig:34216:40: 0x627363b in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30751:73: 0x623fffd in analyzeIsNonErrComptimeOnly (zig)
                    const resolved_ty = try sema.resolveInferredErrorSet(block, src, set_ty);
                                                                        ^
/home/andy/Downloads/zig/src/Sema.zig:30781:56: 0x674a42c in analyzeIsNonErr (zig)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/home/andy/Downloads/zig/src/Sema.zig:17888:32: 0x617b052 in zirIsNonErr (zig)
    return sema.analyzeIsNonErr(block, src, operand);
                               ^
/home/andy/Downloads/zig/src/Sema.zig:1046:66: 0x5eaeac0 in analyzeBodyInner (zig)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc0c9 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x6243e23 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2c0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105a38 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8de44 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73aa6 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Compilation.zig:3183:42: 0x5c71b60 in processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/andy/Downloads/zig/src/Compilation.zig:3120:30: 0x5ad3ec3 in performAllTheWork (zig)
            try processOneJob(comp, work_item, main_progress_node);
                             ^
/home/andy/Downloads/zig/src/Compilation.zig:2067:31: 0x5acf7f1 in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/andy/Downloads/zig/src/main.zig:3887:24: 0x5aff3be in updateModule (zig)
        try comp.update(main_progress_node);
                       ^
/home/andy/Downloads/zig/src/main.zig:3308:17: 0x5b2eea8 in buildOutputType (zig)
    updateModule(comp) catch |err| switch (err) {
                ^
/home/andy/Downloads/zig/src/main.zig:273:31: 0x598ead3 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .{ .build = .Obj });
                              ^
/home/andy/Downloads/zig/src/main.zig:213:20: 0x598bd45 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/andy/Downloads/zig/lib/std/start.zig:608:37: 0x598b79e in main (zig)
            const result = root.main() catch |err| {
                                    ^
andrewrk commented 1 year ago

Alright I have 3 issues resolved in #16495 but there is still another issue left, and I need to work on coming up with a reduced test case in order to solve it.

Semantic Analysis [10463] thread 872992 panic: reached unreachable code
Analyzing src/install/npm.zig: src/install/npm.zig:Registry.BodyPool
      %145 = decl_val("ObjectPool") token_offset:40:26 to :40:36
      %146 = dbg_stmt(1, 36)
    > %147 = call(.compile_time, %145, [
        {
          %148 = decl_val("MutableString") token_offset:40:37 to :40:50
          %149 = break_inline(%147, %148)
        },
        {
          %150 = decl_val("MutableString") token_offset:40:52 to :40:65
          %151 = field_val(%150, "init2048") node_offset:40:52 to :40:74
          %152 = break_inline(%147, %151)
        },
        {
          %153 = break_inline(%147, @InternPool.Index.bool_true)
        },
        {
          %154 = int(8)
          %155 = break_inline(%147, %154)
        },
      ]) node_offset:40:26 to :40:84
      %156 = break_inline(%144, %147)
    For full context, use the command
      zig ast-check -t src/install/npm.zig

  in src/install/extract_tarball.zig: src/install/extract_tarball.zig:extract
    > %1089 = field_ptr(%1087, "BodyPool") node_offset:192:25 to :192:46
  in src/install/extract_tarball.zig: src/install/extract_tarball.zig:extract
    > %960 = block({%961..%1500}) node_offset:171:5 to :171:6
  in src/install/extract_tarball.zig: src/install/extract_tarball.zig:extract
    > %830 = block({%831..%2319}) node_offset:156:85 to :156:86
  in src/install/install.zig: src/install/install.zig:Task.callback
    > %3511 = field_call(.auto, %3508, "run", [
        {%3512},
      ]) node_offset:643:32 to :643:65
  in src/install/install.zig: src/install/install.zig:Task.callback
    > %3515 = block({%3503..%3514}) node_offset:645:19 to :645:24
  in src/install/install.zig: src/install/install.zig:Task.callback
    > %3448 = block({%3449..%3615}) node_offset:635:25 to :635:26
  in src/install/install.zig: src/install/install.zig:Task.callback
    > %3130 = switch_block(%3128,
        %3131 => {%3132..%3445},
        %3446 => {%3447..%3617},
        %3618 => {%3619..%3882},
        %3883 => {%3884..%4050},
        %4051 => {%4052..%4217}) node_offset:589:9 to :589:15
  in src/install/install.zig: src/install/install.zig:Task.callback
    > %3092 = block({%3093..%4223}) node_offset:581:50 to :581:51

/home/andy/Downloads/zig/lib/std/debug.zig:344:14: 0x598c91c in assert (zig)
    if (!ok) unreachable; // assertion failure
             ^
/home/andy/Downloads/zig/src/InternPool.zig:3870:19: 0x59f4701 in get (zig)
            assert(opt.val == .none or ip.indexToKey(opt.ty).opt_type == ip.typeOf(opt.val));
                  ^
/home/andy/Downloads/zig/src/Module.zig:6439:31: 0x5a920f2 in intern (zig)
    return mod.intern_pool.get(mod.gpa, key);
                              ^
/home/andy/Downloads/zig/src/Sema.zig:31694:53: 0x6262437 in wrapOptional (zig)
        return sema.addConstant((try sema.mod.intern(.{ .opt = .{
                                                    ^
/home/andy/Downloads/zig/src/Sema.zig:26909:41: 0x5ece97c in coerceExtra (zig)
            return try sema.wrapOptional(block, dest_ty, intermediate, inst_src);
                                        ^
/home/andy/Downloads/zig/src/Sema.zig:7361:48: 0x6bda29a in analyzeInlineCallArg (zig)
            const casted_arg = sema.coerceExtra(arg_block, param_ty.toType(), uncasted_arg, arg_src, .{ .param_src = .{
                                               ^
/home/andy/Downloads/zig/src/Sema.zig:7008:42: 0x672f405 in analyzeCall (zig)
            try sema.analyzeInlineCallArg(
                                         ^
/home/andy/Downloads/zig/src/Sema.zig:6640:32: 0x6168b09 in zirCall__anon_142023 (zig)
        return sema.analyzeCall(block, func, func_ty, callee_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src, call_dbg_node);
                               ^
/home/andy/Downloads/zig/src/Sema.zig:1002:62: 0x5eac7e9 in analyzeBodyInner (zig)
            .call                         => try sema.zirCall(block, inst, .direct),
                                                             ^
/home/andy/Downloads/zig/src/Sema.zig:898:45: 0x5c93f65 in analyzeBodyBreak (zig)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
/home/andy/Downloads/zig/src/Module.zig:4310:50: 0x5c91142 in semaDecl (zig)
    const result_ref = (try sema.analyzeBodyBreak(&block_scope, body)).?.operand;
                                                 ^
/home/andy/Downloads/zig/src/Module.zig:3828:32: 0x5a91877 in ensureDeclAnalyzed (zig)
        break :blk mod.semaDecl(decl_index) catch |err| switch (err) {
                               ^
/home/andy/Downloads/zig/src/Sema.zig:30399:27: 0x676f4c3 in ensureDeclAnalyzed (zig)
    mod.ensureDeclAnalyzed(decl_index) catch |err| {
                          ^
/home/andy/Downloads/zig/src/Sema.zig:30463:32: 0x67f6f10 in analyzeDeclRefInner (zig)
    try sema.ensureDeclAnalyzed(decl_index);
                               ^
/home/andy/Downloads/zig/src/Sema.zig:30453:36: 0x62892be in analyzeDeclRef (zig)
    return sema.analyzeDeclRefInner(decl_index, true);
                                   ^
/home/andy/Downloads/zig/src/Sema.zig:25779:35: 0x663282e in namespaceLookupRef (zig)
    return try sema.analyzeDeclRef(decl);
                                  ^
/home/andy/Downloads/zig/src/Sema.zig:25503:56: 0x6109d50 in fieldPtr (zig)
                        if (try sema.namespaceLookupRef(block, src, namespace, field_name)) |inst| {
                                                       ^
/home/andy/Downloads/zig/src/Sema.zig:9541:25: 0x6175917 in zirFieldPtr (zig)
    return sema.fieldPtr(block, src, object_ptr, field_name, field_name_src, initializing);
                        ^
/home/andy/Downloads/zig/src/Sema.zig:1031:66: 0x5eadf11 in analyzeBodyInner (zig)
            .field_ptr                    => try sema.zirFieldPtr(block, inst, false),
                                                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc579 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x62442a3 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2d0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc579 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x62442a3 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2d0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105a68 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8de54 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73ae6 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:30412:31: 0x68007ac in ensureFuncBodyAnalyzed (zig)
    mod.ensureFuncBodyAnalyzed(func) catch |err| {
                              ^
/home/andy/Downloads/zig/src/Sema.zig:34248:40: 0x6273aeb in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(func_index);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:34273:49: 0x6110509 in resolveInferredErrorSetPtr (zig)
        switch (try sema.resolveInferredErrorSet(block, src, other_ies_index)) {
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:34322:40: 0x6be07f8 in resolveAdHocInferredErrorSetTy (zig)
    try sema.resolveInferredErrorSetPtr(block, src, ies);
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:7173:67: 0x67340d9 in analyzeCall (zig)
            const new_ty = try sema.resolveAdHocInferredErrorSetTy(block, call_src, sema.typeOf(result).toIntern());
                                                                  ^
/home/andy/Downloads/zig/src/Sema.zig:6640:32: 0x616aa8c in zirCall__anon_142025 (zig)
        return sema.analyzeCall(block, func, func_ty, callee_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src, call_dbg_node);
                               ^
/home/andy/Downloads/zig/src/Sema.zig:1003:62: 0x5eac8b1 in analyzeBodyInner (zig)
            .field_call                   => try sema.zirCall(block, inst, .field),
                                                             ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc579 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x62442a3 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2d0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc579 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x62442a3 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2d0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:861:30: 0x67dab2e in analyzeBodyRuntimeBreak (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Sema.zig:10185:52: 0x676c7c1 in analyzeProngRuntime (zig)
                return sema.analyzeBodyRuntimeBreak(case_block, prong_body);
                                                   ^
/home/andy/Downloads/zig/src/Sema.zig:11533:40: 0x61902cf in zirSwitchBlock (zig)
            try spa.analyzeProngRuntime(
                                       ^
/home/andy/Downloads/zig/src/Sema.zig:1069:69: 0x5eafce1 in analyzeBodyInner (zig)
            .switch_block                 => try sema.zirSwitchBlock(block, inst, false),
                                                                    ^
/home/andy/Downloads/zig/src/Sema.zig:5725:34: 0x67dc579 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/Downloads/zig/src/Sema.zig:5708:33: 0x62442a3 in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/Downloads/zig/src/Sema.zig:1543:49: 0x5ebe2d0 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/Downloads/zig/src/Sema.zig:881:30: 0x6105a68 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/Downloads/zig/src/Module.zig:5323:21: 0x5e8de54 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/Downloads/zig/src/Module.zig:3922:40: 0x5c73ae6 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/Downloads/zig/src/Compilation.zig:3183:42: 0x5c71ba0 in processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/andy/Downloads/zig/src/Compilation.zig:3120:30: 0x5ad3f03 in performAllTheWork (zig)
            try processOneJob(comp, work_item, main_progress_node);
                             ^
/home/andy/Downloads/zig/src/Compilation.zig:2067:31: 0x5acf831 in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/andy/Downloads/zig/src/main.zig:3887:24: 0x5aff3fe in updateModule (zig)
        try comp.update(main_progress_node);
                       ^
/home/andy/Downloads/zig/src/main.zig:3308:17: 0x5b2eee8 in buildOutputType (zig)
    updateModule(comp) catch |err| switch (err) {
                ^
/home/andy/Downloads/zig/src/main.zig:273:31: 0x598eb13 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .{ .build = .Obj });
                              ^
/home/andy/Downloads/zig/src/main.zig:213:20: 0x598bd85 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/andy/Downloads/zig/lib/std/start.zig:608:37: 0x598b7de in main (zig)
            const result = root.main() catch |err| {
                                    ^
Jarred-Sumner commented 1 year ago

Thanks @andrewrk.

Incase this is helpful, here're two unusual patterns in some code mentioned in that last stacktrace:

comptime interface where the decls are either functions or void

Usage

conditionally call a comptime-known init function if it was passed in an if/else and set the else branch to undefined

This is where BodyPool is declared

andrewrk commented 1 year ago

Thanks!

I have a reduction now:

test {
    _ = A;
}
const A = B(void, c);
fn c() !void {}
fn B(comptime T: type, comptime d: ?fn () anyerror!T) type {
    _ = d;
    return struct {};
}
andrewrk commented 1 year ago

Alright, I've made it through all the crashes. #16518 is expected to close this issue now.

I do see some compilation errors now:

src/js_lexer/identifier_cache.zig:9:79: error: unable to open 'id_continue_bitset.meta.blob': FileNotFound
        return comptime @as(CachedBitset, @bitCast(bun.asByteSlice(@embedFile(filename)).ptr[0..@sizeOf(CachedBitset)].*));
                                                                              ^~~~~~~~
src/js_lexer/identifier_cache.zig:19:51: note: called from here
pub const id_continue_meta = CachedBitset.fromFile("id_continue_bitset.meta.blob");
                             ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/js_lexer/identifier_cache.zig:9:79: error: unable to open 'id_start_bitset.meta.blob': FileNotFound
        return comptime @as(CachedBitset, @bitCast(bun.asByteSlice(@embedFile(filename)).ptr[0..@sizeOf(CachedBitset)].*));
                                                                              ^~~~~~~~
src/js_lexer/identifier_cache.zig:18:48: note: called from here
pub const id_start_meta = CachedBitset.fromFile("id_start_bitset.meta.blob");
                          ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/bundler.zig:745:52: error: struct 'json.stringify.StringifyOptions' has no member named 'Whitespace'
            .whitespace = std.json.StringifyOptions.Whitespace{
                          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/home/andy/dev/zig/lib/std/json/stringify.zig:10:30: note: struct declared here
pub const StringifyOptions = struct {
                             ^~~~~~
src/css_scanner.zig:1046:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, false);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/css_scanner.zig:1046:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, false);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/css_scanner.zig:1046:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, false);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/css_scanner.zig:1046:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, false);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/css_scanner.zig:1046:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, false);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/css_scanner.zig:1046:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, false);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/css_scanner.zig:1046:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, false);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/css_scanner.zig:1046:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, false);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
root.zig:7:37: error: unable to open 'packages/bun-error/dist/index.js': FileNotFound
    pub const error_js = @embedFile(error_js_path);
                                    ^~~~~~~~~~~~~
src/runtime.zig:202:49: error: unable to open './runtime.bun.out.js': FileNotFound
    pub const ProdSourceContentBun = @embedFile("./runtime.bun.out.js");
                                                ^~~~~~~~~~~~~~~~~~~~~~
src/node_fallbacks.zig:9:40: error: unable to open './node-fallbacks/out/assert.js': FileNotFound
const assert_code: string = @embedFile("./node-fallbacks/out/assert.js");
                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/bun.js/module_loader.zig:100:73: error: unable to open '../js/out/modules_dev/node/wasi.js': FileNotFound
        pub const file = @embedFile("../js/out/" ++ moduleFolder ++ "/" ++ input);
                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
src/bun.js/module_loader.zig:100:73: error: unable to open '../js/out/modules_dev/bun/wasi-runner.js': FileNotFound
        pub const file = @embedFile("../js/out/" ++ moduleFolder ++ "/" ++ input);
                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
src/js_parser.zig:18430:53: error: unable to resolve inferred error set
                        p.visitStmts(&_stmts, kind) catch unreachable;
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
src/js_parser.zig:18430:53: error: unable to resolve inferred error set
                        p.visitStmts(&_stmts, kind) catch unreachable;
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
src/js_parser.zig:18430:53: error: unable to resolve inferred error set
                        p.visitStmts(&_stmts, kind) catch unreachable;
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
src/js_parser.zig:18430:53: error: unable to resolve inferred error set
                        p.visitStmts(&_stmts, kind) catch unreachable;
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
src/js_parser.zig:18430:53: error: unable to resolve inferred error set
                        p.visitStmts(&_stmts, kind) catch unreachable;
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
src/js_parser.zig:18430:53: error: unable to resolve inferred error set
                        p.visitStmts(&_stmts, kind) catch unreachable;
                        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
src/css_scanner.zig:1031:32: error: unable to resolve inferred error set
                        return err;
                               ^~~
src/css_scanner.zig:1050:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, true);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/css_scanner.zig:1031:32: error: unable to resolve inferred error set
                        return err;
                               ^~~
src/css_scanner.zig:1050:20: error: unable to resolve inferred error set
            return try writeChunk(writer, chunk, true);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
root.zig:12:38: error: unable to open 'packages/bun-error/dist/bun-error.css': FileNotFound
    pub const error_css = @embedFile(error_css_path);
                                     ^~~~~~~~~~~~~~

as for those "cannot resolve inferred error set" that's a known behavior change, a limitation of mutually recursing functions that have inferred error sets. In the future this limitation may or may not be lifted. For now, I suggest to work around it by making those affected functions have explicit error sets. One strategy is to just give them an empty error set then see what the compiler says is missing, then create an explicitly named error set with those errors in it.