zig icon indicating copy to clipboard operation
zig copied to clipboard

Compiler segfaults when building code accessing ComptimeStringMap

Open ringtailsoftware opened this issue 1 year ago • 0 comments

Zig Version

zig-0.11.0-dev.1971+5a12d0070

Steps to Reproduce and Observed Behavior

Zig compiler crashes in zig build on https://github.com/ringtailsoftware/zig-embeddir/tree/crashbug

Possibly it's to do with using this map before it's created? https://github.com/ringtailsoftware/zig-embeddir/blob/crashbug/src/main.zig#L29

uname -a
Linux 2e4484a2d4e3 5.15.49-linuxkit #1 SMP PREEMPT Tue Sep 13 07:51:32 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux
zig build
thread 2007 panic: reached unreachable code
Analyzing /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
      %3085 = decl_ref("root")
      %3086 = dbg_stmt(17, 32)
      %3087 = field_call_bind(%3085, "main")
      %3088 = dbg_stmt(17, 37)
      %3089 = call(.auto, %3087, [])
    > %3090 = is_non_err(%3089)
      %3091 = condbr(%3090, {
        %3093 = err_union_payload_unsafe(%3089)
        %3151 = break(%3092, %3093)
      }, {
        %3094 = save_err_ret_index(@Zir.Inst.Ref.none)
        %3095 = err_union_code(%3089)
        %3096 = block({
          %3097 = dbg_block_begin()
          %3098 = dbg_stmt(18, 17)
          %3099 = decl_ref("std")
          %3100 = dbg_stmt(18, 20)
          %3101 = field_ptr(%3099, "log")
          %3102 = dbg_stmt(18, 24)
          %3103 = field_call_bind(%3101, "err")
          %3104 = dbg_stmt(18, 28)
          %3105 = call(nodiscard .auto, %3103, [
            {
              %3106 = str("{s}")
              %3107 = break_inline(%3105, %3106)
            },
            {
              %3108 = dbg_stmt(18, 38)
              %3109 = as_node(@Zir.Inst.Ref.anyerror_type, %3095)
              %3110 = error_name(%3109)
              %3111 = array_init_anon({%3110})
              %3112 = break_inline(%3105, %3111)
            },
          ])
          %3113 = dbg_stmt(19, 21)
          %3117 = block({
            %3114 = extended(error_return_trace())
            %3115 = is_non_null(%3114)
            %3116 = condbr(%3115, {
              %3118 = dbg_block_begin()
              %3119 = optional_payload_unsafe(%3114)
              %3120 = dbg_var_val(%3119, "trace")
              %3121 = block({
                %3122 = dbg_block_begin()
                %3123 = dbg_stmt(20, 21)
                %3124 = decl_ref("std")
                %3125 = dbg_stmt(20, 24)
                %3126 = field_ptr(%3124, "debug")
                %3127 = dbg_stmt(20, 30)
                %3128 = field_call_bind(%3126, "dumpStackTrace")
                %3129 = dbg_stmt(20, 45)
                %3130 = call(nodiscard .auto, %3128, [
                  {
                    %3131 = validate_deref(%3119)
                    %3132 = load(%3119)
                    %3133 = break_inline(%3130, %3132)
                  },
                ])
                %3134 = dbg_block_end()
                %3135 = restore_err_ret_index(%3121, @Zir.Inst.Ref.none)
                %3136 = break(%3121, @Zir.Inst.Ref.void_value)
              })
              %3137 = dbg_block_end()
              %3138 = break(%3117, @Zir.Inst.Ref.void_value)
            }, {
              %3139 = break(%3117, @Zir.Inst.Ref.void_value)
            })
          })
          %3140 = ensure_result_used(%3117)
          %3141 = dbg_stmt(22, 17)
          %3142 = ret_type()
          %3143 = as_node(%3142, @Zir.Inst.Ref.one)
          %3144 = restore_err_ret_index(@Zir.Inst.Ref.none, @Zir.Inst.Ref.none)
          %3145 = dbg_stmt(22, 17)
          %3146 = ret_node(%3143)
          %3147 = dbg_block_end()
          %3148 = restore_err_ret_index(%3096, @Zir.Inst.Ref.none)
          %3149 = break(%3096, @Zir.Inst.Ref.void_value)
        })
        %3150 = restore_err_ret_index(%3092, @Zir.Inst.Ref.none)
        %3152 = break(%3092, @Zir.Inst.Ref.void_value)
      })
    For full context, use the command
      zig ast-check -t /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig

  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
    > %3092 = block({%3085..%3091})
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
    > %3082 = block({%3083..%3229})
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
    > %2986 = switch_block(%2983,
        else => {%3232..%3236},
        %2988 => {%2989..%3002},
        %3004 => {%3005..%3024},
        %3027 => {%3025..%3078},
        %3080 => {%3081..%3231})
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMain
    > %2970 = block({%2971..%3240})
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:initEventLoopAndCallMain
    > %2686 = builtin_call(%2684, %2685, @Zir.Inst.Ref.empty_struct)
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:initEventLoopAndCallMain
    > %2530 = block({%2531..%2694})
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMainWithArgs
    > %2319 = call(.auto, %2317, [])
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:callMainWithArgs
    > %2280 = block({%2281..%2327})
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:posixCallMainAndExit
    > %2145 = builtin_call(%2142, %2143, %2144)
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:posixCallMainAndExit
    > %2141 = call(nodiscard .auto, %2139, [
        {%2142..%2146},
      ])
  in /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/lib/zig/std/start.zig: start.zig:posixCallMainAndExit
    > %1756 = block({%1757..%2149})

/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/type.zig:3962:21: 0xbaa53f in slicePtrFieldType (zig)
            else => unreachable,
                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:3363:58: 0xd8dfeb in lowerValue (zig)
                            .ty = tv.ty.slicePtrFieldType(&buf),
                                                         ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:3524:81: 0xd9079b in lowerValue (zig)
                        return dg.lowerValue(.{ .ty = payload_ty, .val = payload.data });
                                                                                ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:4464:48: 0x175b2bf in resolveValue (zig)
        const llvm_val = try self.dg.lowerValue(tv);
                                               ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:4457:40: 0x175b71f in resolveInst (zig)
            .val = self.air.value(inst).?,
                                       ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:4763:54: 0x178ea43 in airCall (zig)
                const llvm_arg = try self.resolveInst(arg);
                                                     ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:4615:55: 0x125f547 in genBody (zig)
                .call              => try self.airCall(inst, .Auto),
                                                      ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/codegen/llvm.zig:1200:35: 0x125a34b in updateFunc (zig)
        fg.genBody(air.getMainBody()) catch |err| switch (err) {
                                  ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/link/Elf.zig:2464:74: 0x1262853 in updateFunc (zig)
        if (self.llvm_object) |llvm_object| return llvm_object.updateFunc(module, func, air, liveness);
                                                                         ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/link.zig:544:77: 0xf63f43 in updateFunc (zig)
            .elf   => return @fieldParentPtr(Elf,   "base", base).updateFunc(module, func, air, liveness),
                                                                            ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Module.zig:4341:37: 0xd3cac7 in ensureFuncBodyAnalyzed (zig)
            comp.bin_file.updateFunc(mod, func, air, liveness) catch |err| switch (err) {
                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:28244:36: 0x18aabcb in ensureFuncBodyAnalyzed (zig)
    sema.mod.ensureFuncBodyAnalyzed(func) catch |err| {
                                   ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:30871:44: 0x138f853 in resolveInferredErrorSet (zig)
        try sema.ensureFuncBodyAnalyzed(ies.func);
                                           ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:28536:49: 0x13521d3 in analyzeIsNonErrComptimeOnly (zig)
                try sema.resolveInferredErrorSet(block, src, ies);
                                                ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:28563:56: 0x180469b in analyzeIsNonErr (zig)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:16739:32: 0x12acc83 in zirIsNonErr (zig)
    return sema.analyzeIsNonErr(block, src, operand);
                               ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:956:66: 0xf81d37 in analyzeBodyInner (zig)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:10770:49: 0x12bbb87 in zirSwitchBlock (zig)
                    return sema.resolveBlockBody(block, src, &child_block, body, inst, merges);
                                                ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:978:69: 0xf8314b in analyzeBodyInner (zig)
            .switch_block                 => try sema.zirSwitchBlock(block, inst),
                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:795:30: 0x124b49b in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6802:55: 0x17ee3a7 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                                      ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:21487:28: 0x12f641b in zirBuiltinCall (zig)
    return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
                           ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1034:69: 0xf86497 in analyzeBodyInner (zig)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:795:30: 0x124b49b in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6802:55: 0x17ee3a7 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                                      ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6319:32: 0x129e327 in zirCall (zig)
        return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
                               ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:913:62: 0xf7f58f in analyzeBodyInner (zig)
            .call                         => try sema.zirCall(block, inst),
                                                             ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:795:30: 0x124b49b in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6802:55: 0x17ee3a7 in analyzeCall (zig)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                                      ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:21487:28: 0x12f641b in zirBuiltinCall (zig)
    return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
                           ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1034:69: 0xf86497 in analyzeBodyInner (zig)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:812:45: 0xd5d087 in analyzeBodyBreak (zig)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:762:50: 0x17e44a7 in resolveBody (zig)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                                                 ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:6269:63: 0x129deeb in zirCall (zig)
        const resolved = try sema.resolveBody(block, args_body[arg_start..arg_end], inst);
                                                              ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:913:62: 0xf7f58f in analyzeBodyInner (zig)
            .call                         => try sema.zirCall(block, inst),
                                                             ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5426:34: 0x1825f37 in resolveBlockBody (zig)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:5409:85: 0x134e17b in zirBlock (zig)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:1454:69: 0xf8fe7f in analyzeBodyInner (zig)
                if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
                                                                    ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Sema.zig:795:30: 0x124b49b in analyzeBody (zig)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Module.zig:5602:43: 0xf61797 in analyzeFnBody (zig)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                                          ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Module.zig:4300:40: 0xd3c577 in ensureFuncBodyAnalyzed (zig)
            var air = mod.analyzeFnBody(func, sema_arena) catch |err| switch (err) {
                                       ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Compilation.zig:3296:42: 0xd3a8a3 in processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Compilation.zig:3234:30: 0xbe8c2f in performAllTheWork (zig)
            try processOneJob(comp, work_item);
                             ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/Compilation.zig:2425:31: 0xbe4ac7 in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/main.zig:3641:20: 0xc0b853 in updateModule (zig)
    try comp.update();
                   ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/main.zig:3278:17: 0xafc9d7 in buildOutputType (zig)
    updateModule(gpa, comp, hook) catch |err| switch (err) {
                ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/main.zig:263:31: 0xad082b in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .{ .build = .Exe });
                              ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/main.zig:207:20: 0xacffcb in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/lib/std/start.zig:617:37: 0xad24fb in main (zig)
            const result = root.main() catch |err| {
                                    ^
???:?:?: 0xffffadc073fb in ??? (???)
???:?:?: 0xffffadc074cb in ??? (???)
???:?:?: 0xace5ef in ??? (/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/src/zig_llvm.cpp)
error: embdir...
error: The following command terminated unexpectedly:
/zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/bin/zig build-exe /zig/zig-embeddir/src/main.zig -cflags -Wall -- /zig/zig-embeddir/src/pocketmod.c --cache-dir /zig/zig-embeddir/zig-cache --global-cache-dir /home/pulseaudio/.cache/zig --name embdir --mod assets::/zig/zig-embeddir/zig-cache/options/L6tYGsVMZq2VP02EtjG_iuhaNJCOWwTEG1k-msXKrAXnnNIN9CH2J_MGChV35kRT --deps assets -I /zig/zig-embeddir/src --enable-cache
error: the following build command failed with exit code 6:
/zig/zig-embeddir/zig-cache/o/bbec3e8b8b5574af1013f795199a9b47/build /zig/compiler/zig-0.11.0-dev.1971+5a12d0070/build/stage3/bin/zig /zig/zig-embeddir /zig/zig-embeddir/zig-cache /home/pulseaudio/.cache/zig
root@2e4484a2d4e3:/zig/zig-embeddir#

Expected Behavior

exit(0)

ringtailsoftware avatar Mar 15 '23 01:03 ringtailsoftware