ziglang / zig

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

assertion failure in liveness #15814

Open Deecellar opened 1 year ago

Deecellar commented 1 year ago

Zig Version

0.11.0-dev.3258+7621e5693

Steps to Reproduce and Observed Behavior

Expected Behavior

To download the package without issues

edyu commented 1 year ago

15723

edyu commented 1 year ago

If you want a workaround, you can have a local http server (such as python server) serve up the local version of the package file pointed by the url and once it hits the cache, you can just turn off the server (you won't need it again on the same machine). Your build.zig.zon file can even go back to the regular url. At least it will allow you to proceed while they fix this.

DraagrenKirneh commented 1 year ago

Downloading and hashing this package worked correctly for me (zig version = 0.11.0-dev.2969+855493bb8). This is the build.zig.zon I used (to get the correct package hash I first put in a dummy hash value, and then copied the correct one from the error I got on missmatch).

Do note that zig do not create the hash in build.zig.zon when downloading a package, it has to be supplied beforehand. What happens is that zig compares the hash given in the .zon file with the content of the downloaded package to ensure that the correct/expected files+content are present.

.{
    .name = "test",
    .version = "0.0.0",
    .dependencies = .{
        .stuff = .{
            .url = "https://github.com/ziglibs/s2s/archive/6484f786b1830115601cd9ffb51bccec551ac6be.tar.gz",
            .hash = "1220f6c17bde3f75ac79f29b5572f75fc35275b552b5b398d42df133fa038a29b396",
        },
    },
}
Deecellar commented 1 year ago

15723

Not related, the package is downloaded just fine, it's in the path one would expect and everything

The problem is 100% when it starts making the hash to check if the provided hash is correct, once you use strace, you see that it tries to open the file (After a few successful matches) and breaks, in the case of using a package like antiphony, which has images and assets for decoration, on those images for such decoration.

DraagrenKirneh commented 1 year ago

@Deecellar on which OS/Platform and File-system are you experiencing the hashing issue?

edyu commented 1 year ago

Still having the following error at 0.11.0-dev.3312+ab37ab33c 'zig build' terminated by signal SIGSEGV (Address boundary error)

.{
    .name = "mytest",
    .version = "0.0.2",

    .dependencies = .{
        // zap v0.1.4-pre
        .zap = .{
            .url = "https://github.com/zigzap/zap/archive/refs/tags/v0.1.4-pre.tar.gz",
            .hash = "12204613bae513282f2b7e468045401cbae09bb19e42baeca193b9c98ff6f2ceb6ef",
        }
    }
}
renerocksai commented 1 year ago

zig build segfaults at least 33% of the time if it needs to fetch packages. it has done so for a while. this issue was shadowed by more frequent TLS bugs before. I can't poinpoint to where exactly it is crashing until we get zig debug releases.

I run nightly CI builds and the chance of waking up to a segfaulted build is > 33%

andrewrk commented 1 year ago

Here's what it looks like if you use a debug build of zig:

andy@ark ~/t/15814 [1]> ~/dev/zig/build-release/stage4/bin/zig build
Semantic Analysis [165] thread 2707816 panic: reached unreachable code
Analyzing /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makePath
      %8839 = ref(%8815) token_offset:1466:13 to :1466:17
      %8840 = dbg_stmt(4, 17)
      %8841 = dbg_stmt(4, 25)
      %8842 = field_call(.auto, %8839, "makeDir", [
        {
          %8843 = ref(%8818) token_offset:1466:26 to :1466:34
          %8844 = load(%8822) node_offset:1466:38 to :1466:47
          %8845 = dbg_stmt(4, 34)
          %8846 = slice_end(%8843, @InternPool.Index.zero, %8844) node_offset:1466:26 to :1466:48
          %8847 = break_inline(%8842, %8846)
        },
      ]) node_offset:1466:13 to :1466:49
    > %8848 = is_non_err(%8842) node_offset:1466:13 to :1466:55
      %8849 = condbr(%8848, {
        %8851 = err_union_payload_unsafe(%8842) node_offset:1466:13 to :1466:55
        %8963 = break(%8850, %8851)
      }, {
        %8852 = save_err_ret_index(%4294967212)
        %8853 = err_union_code(%8842) node_offset:1466:13 to :1466:55
        %8854 = dbg_stmt(4, 70)
        %8856 = error_value("PathAlreadyExists") token_offset:1467:23 to :1467:40
        %8881 = error_value("FileNotFound") token_offset:1473:23 to :1473:35
        %8855 = switch_block(%8853,
          else => {
            %8954 = dbg_block_begin()
            %8955 = dbg_stmt(20, 25)
            %8956 = ret_type() node_offset:1482:25 to :1482:35
            %8957 = as_node(%8956, %8853) node_offset:1482:32 to :1482:35
            %8958 = dbg_stmt(20, 25)
            %8959 = restore_err_ret_index(%4294967212, %8957)
            %8960 = ret_node(%8957) node_offset:1482:25 to :1482:35
            %8961 = dbg_block_end()
          },
          %8856 => {
            %8857 = dbg_block_begin()
            %8858 = block({
              %8859 = dbg_block_begin()
              %8860 = dbg_stmt(9, 25)
              %8867 = block({
                %8861 = load(%8822) node_offset:1471:25 to :1471:34
                %8862 = dbg_stmt(9, 46)
                %8863 = field_val(%8818, "len") node_offset:1471:38 to :1471:50
                %8864 = cmp_eq(%8861, %8863) node_offset:1471:25 to :1471:50
                %8865 = as_node(@InternPool.Index.bool_type, %8864) node_offset:1471:25 to :1471:50
                %8866 = condbr(%8865, {
                  %8868 = dbg_block_begin()
                  %8869 = dbg_stmt(9, 52)
                  %8870 = restore_err_ret_index(%4294967212, %4294967212)
                  %8871 = ret_node(@InternPool.Index.void_value) node_offset:1471:52 to :1471:58
                  %8872 = dbg_block_end()
                  %8873 = break(%8867, @InternPool.Index.unreachable_value)
                }, {
                  %8874 = break(%8867, @InternPool.Index.void_value)
                }) node_offset:1471:21 to :1471:58
              }) node_offset:1471:21 to :1471:58
              %8875 = ensure_result_used(%8867) node_offset:1471:21 to :1471:58
              %8876 = dbg_block_end()
              %8877 = restore_err_ret_index(%8858, %4294967212)
              %8878 = break(%8858, @InternPool.Index.void_value)
            }) node_offset:1467:44 to :1467:45
            %8879 = dbg_block_end()
            %8880 = break(%8855, @InternPool.Index.void_value)
          },
          %8881 => {
            %8882 = dbg_block_begin()
            %8883 = block({
              %8884 = dbg_block_begin()
              %8885 = loop({
                %8888 = block({
                  %8886 = dbg_stmt(13, 28)
                  %8887 = condbr(@InternPool.Index.bool_true, {
                    %8891 = dbg_block_begin()
                    %8889 = block({
                      %8893 = dbg_stmt(13, 34)
                      %8894 = block({
                        %8895 = dbg_block_begin()
                        %8896 = dbg_stmt(14, 29)
                        %8901 = block({
                          %8897 = load(%8822) node_offset:1476:29 to :1476:38
                          %8898 = cmp_eq(%8897, @InternPool.Index.zero) node_offset:1476:29 to :1476:43
                          %8899 = as_node(@InternPool.Index.bool_type, %8898) node_offset:1476:29 to :1476:43
                          %8900 = condbr(%8899, {
                            %8902 = dbg_block_begin()
                            %8903 = dbg_stmt(14, 45)
                            %8904 = ret_type() node_offset:1476:45 to :1476:55
                            %8905 = as_node(%8904, %8853) node_offset:1476:52 to :1476:55
                            %8906 = dbg_stmt(14, 45)
                            %8907 = restore_err_ret_index(%4294967212, %8905)
                            %8908 = ret_node(%8905) node_offset:1476:45 to :1476:55
                            %8909 = dbg_block_end()
                            %8910 = break(%8901, @InternPool.Index.unreachable_value)
                          }, {
                            %8911 = break(%8901, @InternPool.Index.void_value)
                          }) node_offset:1476:25 to :1476:55
                        }) node_offset:1476:25 to :1476:55
                        %8912 = ensure_result_used(%8901) node_offset:1476:25 to :1476:55
                        %8913 = dbg_stmt(15, 25)
                        %8914 = load(%8822) node_offset:1477:25 to :1477:39
                        %8915 = typeof(%8914) node_offset:1477:25 to :1477:39
                        %8916 = dbg_stmt(15, 35)
                        %8917 = sub(%8914, @InternPool.Index.one) node_offset:1477:25 to :1477:39
                        %8918 = store(%8822, %8917)
                        %8919 = dbg_stmt(16, 29)
                        %8931 = block({
                          %8920 = decl_ref("path") token_offset:1478:29 to :1478:33
                          %8921 = dbg_stmt(16, 33)
                          %8922 = dbg_stmt(16, 39)
                          %8923 = field_call(.auto, %8920, "isSep", [
                            {
                              %8924 = load(%8822) node_offset:1478:49 to :1478:58
                              %8925 = as_node(@InternPool.Index.usize_type, %8924) node_offset:1478:49 to :1478:58
                              %8926 = dbg_stmt(16, 48)
                              %8927 = elem_val_node(%8818, %8925) node_offset:1478:40 to :1478:59
                              %8928 = break_inline(%8923, %8927)
                            },
                          ]) node_offset:1478:29 to :1478:60
                          %8929 = as_node(@InternPool.Index.bool_type, %8923) node_offset:1478:29 to :1478:60
                          %8930 = condbr(%8929, {
                            %8932 = dbg_block_begin()
                            %8933 = restore_err_ret_index(%8885, %4294967212)
                            %8934 = break(%8885, @InternPool.Index.void_value)
                            %8935 = dbg_block_end()
                            %8936 = break(%8931, @InternPool.Index.unreachable_value)
                          }, {
                            %8937 = break(%8931, @InternPool.Index.void_value)
                          }) node_offset:1478:25 to :1478:67
                        }) node_offset:1478:25 to :1478:67
                        %8938 = ensure_result_used(%8931) node_offset:1478:25 to :1478:67
                        %8939 = dbg_block_end()
                        %8940 = restore_err_ret_index(%8894, %4294967212)
                        %8941 = break(%8894, @InternPool.Index.void_value)
                      }) node_offset:1475:34 to :1475:35
                      %8942 = break(%8889, @InternPool.Index.void_value)
                    }) node_offset:1475:21 to :1475:26
                    %8892 = dbg_block_end()
                    %8943 = break(%8888, @InternPool.Index.void_value)
                  }, {
                    %8944 = break(%8885, @InternPool.Index.void_value)
                  }) node_offset:1475:21 to :1475:26
                }) node_offset:1475:21 to :1475:26
                %8890 = repeat() node_offset:1475:21 to :1475:26
              }) node_offset:1475:21 to :1475:26
              %8945 = ensure_result_used(%8885) node_offset:1475:21 to :1475:26
              %8946 = dbg_stmt(18, 21)
              %8947 = restore_err_ret_index(%8831, %4294967212)
              %8948 = break(%8831, @InternPool.Index.void_value)
              %8949 = dbg_block_end()
              %8950 = restore_err_ret_index(%8883, %4294967212)
              %8951 = break(%8883, @InternPool.Index.void_value)
            }) node_offset:1473:39 to :1473:40
            %8952 = dbg_block_end()
            %8953 = break(%8855, @InternPool.Index.void_value)
          }) node_offset:1466:62 to :1466:68
        %8962 = restore_err_ret_index(%8850, %4294967212)
        %8964 = break(%8850, %8855)
      }) node_offset:1466:13 to :1466:55
    For full context, use the command
      zig ast-check -t /home/andy/dev/zig/lib/std/fs.zig

  in /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makePath
    > %8850 = block({%8839..%8849}) node_offset:1466:13 to :1466:55
  in /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makePath
    > %8836 = block({%8837..%9036}) node_offset:1465:22 to :1465:23
  in /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makePath
    > %8831 = block({%8835..%9037}) node_offset:1465:9 to :1465:14
  in /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makePath
    > %8829 = condbr(@InternPool.Index.bool_true, {%8833..%9038}, {%9039}) node_offset:1465:9 to :1465:14
  in /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makePath
    > %8830 = block({%8828, %8829}) node_offset:1465:9 to :1465:14
  in /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makePath
    > %8827 = loop({%8830, %8832}) node_offset:1465:9 to :1465:14
  in /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makePath
    > %8819 = block({%8820..%9043}) node_offset:1463:60 to :1463:61
  in /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makeOpenPath
    > %9068 = try(%9066, {%9069..%9071}) node_offset:1498:9 to :1498:36
  in /home/andy/dev/zig/lib/std/fs.zig: fs.zig:Dir.makeOpenPath
    > %9060 = block({%9061..%9088}) node_offset:1496:97 to :1496:98
  in /home/andy/dev/zig/lib/build_runner.zig: build_runner.zig:main
    > %335 = try(%332, {%336..%339}) node_offset:58:19 to :58:65
  in /home/andy/dev/zig/lib/build_runner.zig: build_runner.zig:main
    > %49 = block({%50..%3069}) node_offset:15:21 to :15:22
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:callMain
    > %2958 = is_non_err(%2957) node_offset:608:28 to :608:45
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:callMain
    > %2960 = block({%2954..%2959}) node_offset:608:28 to :608:45
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:callMain
    > %2951 = block({%2952..%3096}) node_offset:607:24 to :607:25
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:callMain
    > %2861 = switch_block(%2859,
        else => {%3099..%3105},
        %2862 => {%2863..%2875},
        %2876 => {%2877..%2895},
        by_val %2896 => {%2897..%2948},
        %2949 => {%2950..%3098}) node_offset:593:5 to :593:11
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:callMain
    > %2845 = block({%2846..%3109}) node_offset:592:22 to :592:23
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:initEventLoopAndCallMain
    > %2566 = builtin_call(%2564, %2565, @InternPool.Index.empty_struct) node_offset:542:12 to :542:48
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:initEventLoopAndCallMain
    > %2413 = block({%2414..%2574}) node_offset:520:41 to :520:42
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:callMainWithArgs
    > %2189 = call(.auto, %2187, []) node_offset:492:12 to :492:38
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:callMainWithArgs
    > %2152 = block({%2153..%2197}) node_offset:485:72 to :485:73
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:posixCallMainAndExit
    > %2019 = builtin_call(%2016, %2017, %2018) node_offset:455:17 to :455:79
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:posixCallMainAndExit
    > %2015 = field_call(nodiscard .auto, %2012, "exit", [
        {%2016..%2020},
      ]) node_offset:455:5 to :455:80
  in /home/andy/dev/zig/lib/std/start.zig: start.zig:posixCallMainAndExit
    > %1613 = block({%1614..%2023}) node_offset:393:49 to :393:50

/home/andy/dev/zig/lib/std/debug.zig:258:14: 0x5ab3346 in assert (zig)
    if (!ok) unreachable; // assertion failure
             ^
/home/andy/dev/zig/src/Liveness/Verify.zig:595:15: 0x6690607 in verifyOperand (zig)
        assert(!dies);
              ^
/home/andy/dev/zig/src/Liveness/Verify.zig:346:39: 0x61e1df9 in verifyBody (zig)
                try self.verifyOperand(inst, pl_op.operand, bt.feed());
                                      ^
/home/andy/dev/zig/src/Liveness/Verify.zig:23:24: 0x5f9b1e5 in verify (zig)
    try self.verifyBody(self.air.getMainBody());
                       ^
/home/andy/dev/zig/src/Module.zig:4262:30: 0x5dcb6e7 in ensureFuncBodyAnalyzed (zig)
                verify.verify() catch |err| switch (err) {
                             ^
/home/andy/dev/zig/src/Sema.zig:30358:36: 0x681a616 in ensureFuncBodyAnalyzed (zig)
    sema.mod.ensureFuncBodyAnalyzed(func) catch |err| {
                                   ^
/home/andy/dev/zig/src/Sema.zig:34124:40: 0x63391c1 in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(ies.func);
                                       ^
/home/andy/dev/zig/src/Sema.zig:30686:53: 0x6305f03 in analyzeIsNonErrComptimeOnly (zig)
                    try sema.resolveInferredErrorSet(block, src, ies_index);
                                                    ^
/home/andy/dev/zig/src/Sema.zig:30714:56: 0x675da1c in analyzeIsNonErr (zig)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/home/andy/dev/zig/src/Sema.zig:18004:32: 0x623e596 in zirIsNonErr (zig)
    return sema.analyzeIsNonErr(block, src, operand);
                               ^
/home/andy/dev/zig/src/Sema.zig:985:66: 0x5fb96b6 in analyzeBodyInner (zig)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:18055:37: 0x6303b6c in zirCondbr (zig)
        return sema.analyzeBodyInner(parent_block, body);
                                    ^
/home/andy/dev/zig/src/Sema.zig:1593:61: 0x5fc620d in analyzeBodyInner (zig)
                if (!block.is_comptime) break sema.zirCondbr(block, inst);
                                                            ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:819:30: 0x61cfdf8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/dev/zig/src/Sema.zig:5414:25: 0x630125c in zirLoop (zig)
    try sema.analyzeBody(&loop_block, body);
                        ^
/home/andy/dev/zig/src/Sema.zig:1469:68: 0x5fc5216 in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirLoop(block, inst);
                                                                   ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:819:30: 0x61cfdf8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/dev/zig/src/Module.zig:5619:21: 0x5f99665 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/dev/zig/src/Module.zig:4217:40: 0x5dcb0b9 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/dev/zig/src/Sema.zig:30358:36: 0x681a616 in ensureFuncBodyAnalyzed (zig)
    sema.mod.ensureFuncBodyAnalyzed(func) catch |err| {
                                   ^
/home/andy/dev/zig/src/Sema.zig:34124:40: 0x63391c1 in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(ies.func);
                                       ^
/home/andy/dev/zig/src/Sema.zig:30686:53: 0x6305f03 in analyzeIsNonErrComptimeOnly (zig)
                    try sema.resolveInferredErrorSet(block, src, ies_index);
                                                    ^
/home/andy/dev/zig/src/Sema.zig:18120:60: 0x6304d30 in zirTry (zig)
    const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
                                                           ^
/home/andy/dev/zig/src/Sema.zig:1639:67: 0x5fc73fd in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirTry(block, inst);
                                                                  ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:819:30: 0x61cfdf8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/dev/zig/src/Module.zig:5619:21: 0x5f99665 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/dev/zig/src/Module.zig:4217:40: 0x5dcb0b9 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/dev/zig/src/Sema.zig:30358:36: 0x681a616 in ensureFuncBodyAnalyzed (zig)
    sema.mod.ensureFuncBodyAnalyzed(func) catch |err| {
                                   ^
/home/andy/dev/zig/src/Sema.zig:34124:40: 0x63391c1 in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(ies.func);
                                       ^
/home/andy/dev/zig/src/Sema.zig:30686:53: 0x6305f03 in analyzeIsNonErrComptimeOnly (zig)
                    try sema.resolveInferredErrorSet(block, src, ies_index);
                                                    ^
/home/andy/dev/zig/src/Sema.zig:18120:60: 0x6304d30 in zirTry (zig)
    const is_non_err = try sema.analyzeIsNonErrComptimeOnly(parent_block, operand_src, err_union);
                                                           ^
/home/andy/dev/zig/src/Sema.zig:1639:67: 0x5fc73fd in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirTry(block, inst);
                                                                  ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:819:30: 0x61cfdf8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/dev/zig/src/Module.zig:5619:21: 0x5f99665 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/dev/zig/src/Module.zig:4217:40: 0x5dcb0b9 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/dev/zig/src/Sema.zig:30358:36: 0x681a616 in ensureFuncBodyAnalyzed (zig)
    sema.mod.ensureFuncBodyAnalyzed(func) catch |err| {
                                   ^
/home/andy/dev/zig/src/Sema.zig:34124:40: 0x63391c1 in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(ies.func);
                                       ^
/home/andy/dev/zig/src/Sema.zig:30686:53: 0x6305f03 in analyzeIsNonErrComptimeOnly (zig)
                    try sema.resolveInferredErrorSet(block, src, ies_index);
                                                    ^
/home/andy/dev/zig/src/Sema.zig:30714:56: 0x675da1c in analyzeIsNonErr (zig)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/home/andy/dev/zig/src/Sema.zig:18004:32: 0x623e596 in zirIsNonErr (zig)
    return sema.analyzeIsNonErr(block, src, operand);
                               ^
/home/andy/dev/zig/src/Sema.zig:985:66: 0x5fb96b6 in analyzeBodyInner (zig)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:10242:45: 0x67876f8 in resolveProngComptime (zig)
                return sema.resolveBlockBody(spa.parent_block, src, child_block, prong_body, spa.switch_block_inst, merges);
                                            ^
/home/andy/dev/zig/src/Sema.zig:11473:52: 0x6250654 in zirSwitchBlock (zig)
                    return spa.resolveProngComptime(
                                                   ^
/home/andy/dev/zig/src/Sema.zig:1008:69: 0x5fba8c7 in analyzeBodyInner (zig)
            .switch_block                 => try sema.zirSwitchBlock(block, inst, false),
                                                                    ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:819:30: 0x61cfdf8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/dev/zig/src/Sema.zig:7080:33: 0x677c190 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/andy/dev/zig/src/Sema.zig:22903:28: 0x6291cd9 in zirBuiltinCall (zig)
    return sema.analyzeCall(block, func, func_ty, func_src, call_src, modifier, ensure_result_used, resolved_args, null, null);
                           ^
/home/andy/dev/zig/src/Sema.zig:1058:69: 0x5fbd007 in analyzeBodyInner (zig)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:819:30: 0x61cfdf8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/dev/zig/src/Sema.zig:7080:33: 0x677c190 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/andy/dev/zig/src/Sema.zig:6600:32: 0x674851e in callCommon (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/dev/zig/src/Sema.zig:6422:22: 0x622dfea in zirCall__anon_131262 (zig)
    return callCommon(
                     ^
/home/andy/dev/zig/src/Sema.zig:940:62: 0x5fb7307 in analyzeBodyInner (zig)
            .call                         => try sema.zirCall(block, inst, Zir.Inst.Call),
                                                             ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:819:30: 0x61cfdf8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/dev/zig/src/Sema.zig:7080:33: 0x677c190 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
/home/andy/dev/zig/src/Sema.zig:22903:28: 0x6291cd9 in zirBuiltinCall (zig)
    return sema.analyzeCall(block, func, func_ty, func_src, call_src, modifier, ensure_result_used, resolved_args, null, null);
                           ^
/home/andy/dev/zig/src/Sema.zig:1058:69: 0x5fbd007 in analyzeBodyInner (zig)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/home/andy/dev/zig/src/Sema.zig:836:45: 0x5deb721 in analyzeBodyBreak (zig)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
/home/andy/dev/zig/src/Sema.zig:785:50: 0x6742f33 in resolveBody (zig)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                                                 ^
/home/andy/dev/zig/src/Sema.zig:6545:46: 0x6747fbd in callCommon (zig)
        const resolved = try sema.resolveBody(block, args_body[arg_start..arg_end], inst);
                                             ^
/home/andy/dev/zig/src/Sema.zig:6422:22: 0x622e538 in zirCall__anon_131263 (zig)
    return callCommon(
                     ^
/home/andy/dev/zig/src/Sema.zig:941:62: 0x5fb73cf in analyzeBodyInner (zig)
            .field_call                   => try sema.zirCall(block, inst, Zir.Inst.FieldCall),
                                                             ^
/home/andy/dev/zig/src/Sema.zig:5633:34: 0x67f3689 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/home/andy/dev/zig/src/Sema.zig:5616:33: 0x630990c in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
/home/andy/dev/zig/src/Sema.zig:1484:49: 0x5fc91f6 in analyzeBodyInner (zig)
                    break :blk try sema.zirBlock(block, inst, tags[inst] == .block_comptime);
                                                ^
/home/andy/dev/zig/src/Sema.zig:819:30: 0x61cfdf8 in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/home/andy/dev/zig/src/Module.zig:5619:21: 0x5f99665 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
/home/andy/dev/zig/src/Module.zig:4217:40: 0x5dcb0b9 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func_index, sema_arena) catch |err| switch (err) {
                                       ^
/home/andy/dev/zig/src/Compilation.zig:3143:42: 0x5dc9099 in processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/andy/dev/zig/src/Compilation.zig:3080:30: 0x5c54f3e in performAllTheWork (zig)
            try processOneJob(comp, work_item, main_progress_node);
                             ^
/home/andy/dev/zig/src/Compilation.zig:2029:31: 0x5c515e8 in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/andy/dev/zig/src/main.zig:3839:24: 0x5c80b0a in updateModule (zig)
        try comp.update(main_progress_node);
                       ^
/home/andy/dev/zig/src/main.zig:4480:21: 0x5b0f361 in cmdBuild (zig)
        updateModule(comp) catch |err| switch (err) {
                    ^
/home/andy/dev/zig/src/main.zig:285:24: 0x5ab5878 in mainArgs (zig)
        return cmdBuild(gpa, arena, cmd_args);
                       ^
/home/andy/dev/zig/src/main.zig:213:20: 0x5ab27c5 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/andy/dev/zig/lib/std/start.zig:608:37: 0x5ab2248 in main (zig)
            const result = root.main() catch |err| {
                                    ^
???:?:?: 0x7fe255f0b24d in ??? (???)
???:?:?: 0x7ffc974d1500 in ??? (???)
fish: Job 1, '~/dev/zig/build-release/stage4/…' terminated by signal SIGABRT (Abort)

This particular crash is not in the package manager but in a liveness analysis pass, after successfully downloading the package.

cc @mlugg liveness bug for you right here