zig icon indicating copy to clipboard operation
zig copied to clipboard

Unreachable in src/type.zig:5272

Open ikskuh opened this issue 1 year ago • 2 comments

Zig Version

0.10.0-dev.4475+5b9c8d1d6

Steps to Reproduce

Hard to reproduce. Will only happen in a module when compiled with a lot of context code.

The trigger is this:

pub const Entity = struct {
    is_old_data: bool,

    origin: Vector3,
    angle: Euler,
    scale: Vector3 = .{ .x = 1, .y = 1, .z = 1 },
    name: String(33) = .{},
    file_name: String(33) = .{},
    action: String(33) = .{},
    skills: [20]f32 = std.mem.zeroes([20]f32),
    flags: Flags = Flags.fromInt(0), // THIS LINE IS OFFENDING
   …
};

The struct is pretty large, and contains a lot of fields. The function Flags.fromInt doesn't exist, but the expected

Expected Behavior

An error message that Flags.fromInt does not exist.

Actual Behavior

Semantic Analysis [1667] tokenize... thread 6970 panic: reached unreachable code
/home/felix/projects/forks/zig/src/type.zig:5272:39: 0x76ec676 in comptimeOnly (zig)
                    .wip, .unknown => unreachable, // This function asserts types already resolved.
                                      ^
/home/felix/projects/forks/zig/src/type.zig:5248:49: 0x76ec94d in comptimeOnly (zig)
                    return child_ty.comptimeOnly();
                                                ^
/home/felix/projects/forks/zig/src/type.zig:5257:59: 0x76eca2e in comptimeOnly (zig)
                return ty.optionalChild(&buf).comptimeOnly();
                                                          ^
/home/felix/projects/forks/zig/src/type.zig:2409:41: 0x790f709 in hasRuntimeBitsAdvanced (zig)
                    return !comptimeOnly(ty);
                                        ^
/home/felix/projects/forks/zig/src/type.zig:2465:60: 0x790edb4 in hasRuntimeBitsAdvanced (zig)
                    if (try field.ty.hasRuntimeBitsAdvanced(ignore_comptime_only, sema_kit))
                                                           ^
/home/felix/projects/forks/zig/src/type.zig:2665:38: 0x76ecefa in hasRuntimeBits (zig)
        return hasRuntimeBitsAdvanced(ty, false, null) catch unreachable;
                                     ^
codegen/llvm.zig:4080:52: 0x79287f5 in lowerDeclRefValue (zig)
codegen/llvm.zig:3271:77: 0x770622c in lowerValue (zig)
codegen/llvm.zig:4363:48: 0x7d46398 in resolveValue (zig)
codegen/llvm.zig:4356:34: 0x7d46947 in resolveInst (zig)
codegen/llvm.zig:7895:46: 0x7d7930a in airStore (zig)
codegen/llvm.zig:4515:53: 0x7ad4ab7 in genBody (zig)
codegen/llvm.zig:1202:35: 0x7acf943 in updateFunc (zig)
link/Elf.zig:2411:74: 0x7ad7b82 in updateFunc (zig)
/home/felix/projects/forks/zig/src/link.zig:522:77: 0x78dad9d in updateFunc (zig)
            .elf   => return @fieldParentPtr(Elf,   "base", base).updateFunc(module, func, air, liveness),
                                                                            ^
/home/felix/projects/forks/zig/src/Module.zig:4341:37: 0x76df078 in ensureFuncBodyAnalyzed (zig)
            comp.bin_file.updateFunc(mod, func, air, liveness) catch |err| switch (err) {
                                    ^
/home/felix/projects/forks/zig/src/Compilation.zig:3060:42: 0x76dcf13 in processOneJob (zig)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
/home/felix/projects/forks/zig/src/Compilation.zig:2998:30: 0x75af60a in performAllTheWork (zig)
            try processOneJob(comp, work_item);
                             ^
/home/felix/projects/forks/zig/src/Compilation.zig:2326:31: 0x75abe4b in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/felix/projects/forks/zig/src/main.zig:3323:20: 0x75b9746 in updateModule (zig)
    try comp.update();
                   ^
/home/felix/projects/forks/zig/src/main.zig:3008:17: 0x7340b7a in buildOutputType (zig)
    updateModule(gpa, comp, hook) catch |err| switch (err) {
                ^
/home/felix/projects/forks/zig/src/main.zig:230:31: 0x731e8f6 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .{ .build = .Exe });
                              ^
/home/felix/projects/forks/zig/src/stage1.zig:56:24: 0x760c807 in main (zig)
        stage2.mainArgs(gpa, arena, args) catch unreachable;
                       ^
error: 3rd_person...
error: The following command terminated unexpectedly:
/home/felix/projects/forks/zig/build/stage3/bin/zig build-exe /home/felix/projects/libraries/basegame/vendor/zero-graphics/src/main/desktop.zig -lc -D_REENTRANT -I/usr/include/SDL2 -lSDL2 -cflags -std=c99 -- /home/felix/projects/libraries/basegame/vendor/zero-graphics/src/rendering/stb_truetype.c /home/felix/projects/libraries/basegame/zig-cache/o/18d826e46ba5f5102d00f0764b9e3f9f/libscintilla.a /home/felix/projects/libraries/basegame/zig-cache/o/f7bc6f284980bfa61acf4903172ac7f7/libnfd.a /home/felix/projects/libraries/basegame/zig-cache/o/b60e43a4f3d36fc51a782d9707fb4ed0/libode.a -lc -lc++ -lc -I/usr/include/atk-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -latk-1.0 -lgobject-2.0 -lglib-2.0 -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/harfbuzz -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lgdk-3 -lz -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -lgdk_pixbuf-2.0 -lcairo-gobject -lcairo -lgobject-2.0 -lglib-2.0 -lgtk-3 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lglib-2.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lgobject-2.0 -lglib-2.0 -lc -lc++ --cache-dir /home/felix/projects/libraries/basegame/zig-cache --global-cache-dir /home/felix/.cache/zig --name 3rd_person --pkg-begin sdl2 /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/SDL.zig/src/binding/sdl.zig --pkg-begin build_options /home/felix/projects/libraries/basegame/zig-cache/options/kh59p23UXKId3bWMadeQ0Yp6cv2kATA4qPk2nBQ2q_3IsG9JTjKRYS1YxdIMHL6s --pkg-end --pkg-end --pkg-begin application /home/felix/projects/libraries/basegame/src/entrypoint.zig --pkg-begin zero-graphics /home/felix/projects/libraries/basegame/vendor/zero-graphics/src/zero-graphics.zig --pkg-begin zigimg /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/zigimg/zigimg.zig --pkg-end --pkg-begin ziglyph /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/ziglyph/src/ziglyph.zig --pkg-end --pkg-begin zigstr /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/zigstr/src/Zigstr.zig --pkg-begin ziglyph /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/ziglyph/src/ziglyph.zig --pkg-end --pkg-end --pkg-begin TextEditor /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/text-editor/src/TextEditor.zig --pkg-begin ziglyph /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/ziglyph/src/ziglyph.zig --pkg-end --pkg-end --pkg-end --pkg-begin zlm /home/felix/projects/libraries/basegame/vendor/zlm/zlm.zig --pkg-end --pkg-begin libgamestudio /home/felix/projects/libraries/basegame/vendor/libgamestudio/src/main.zig --pkg-end --pkg-begin ode /home/felix/projects/libraries/basegame/vendor/ode/src/ode.zig --pkg-begin precision /home/felix/projects/libraries/basegame/vendor/ode/src/ode-single.zig --pkg-end --pkg-begin native /home/felix/.cache/zig/o/a18bfd1c85f8096f0ee330394333f3cb/template.zig --pkg-end --pkg-end --pkg-begin @GAME@ /home/felix/projects/libraries/basegame/demo/future.zig --pkg-begin basegame /home/felix/projects/libraries/basegame/src/package.zig --pkg-end --pkg-end --pkg-end --pkg-begin application-meta /home/felix/projects/libraries/basegame/zig-cache/zero-graphics/o/e81738d79ebe358177d7310a13aeb18270f63fdb/app-meta.zig --pkg-end --pkg-begin zigimg /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/zigimg/zigimg.zig --pkg-end --pkg-begin ziglyph /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/ziglyph/src/ziglyph.zig --pkg-end --pkg-begin zigstr /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/zigstr/src/Zigstr.zig --pkg-begin ziglyph /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/ziglyph/src/ziglyph.zig --pkg-end --pkg-end --pkg-begin TextEditor /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/text-editor/src/TextEditor.zig --pkg-begin ziglyph /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/ziglyph/src/ziglyph.zig --pkg-end --pkg-end --pkg-begin scintilla /home/felix/.cache/zig/o/4b67f5cd8ad5f4da0d75c54a61f7c8e5/code_editor.zig --pkg-end --pkg-begin nfd /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/nfd/src/lib.zig --pkg-end -I /home/felix/projects/libraries/basegame/vendor/zero-graphics/vendor/stb -I /home/felix/projects/libraries/basegame/vendor/zero-graphics/src/scintilla --main-pkg-path /home/felix/projects/libraries/basegame/vendor/zero-graphics/src --enable-cache 
error: the following build command failed with exit code 6:
/home/felix/projects/libraries/basegame/zig-cache/o/0aad63d59fba597f34ffc50777d1c755/build /home/felix/projects/forks/zig/build/stage3/bin/zig /home/felix/projects/libraries/basegame /home/felix/projects/libraries/basegame/zig-cache /home/felix/.cache/zig install

Some gdb debugging:

#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:49
#1  0x00007ffff7caa536 in __GI_abort () at abort.c:79
#2  0x000000000745d0d9 in os.abort () at /home/felix/projects/forks/zig/lib/std/os.zig:508
#3  0x0000000007611a72 in debug.panicImpl () at /home/felix/projects/forks/zig/lib/std/debug.zig:393
#4  0x000000000731c324 in builtin.default_panic () at /home/felix/projects/forks/zig/lib/std/builtin.zig:839
#5  0x00000000076ecd52 in type.Type.comptimeOnly () at type.zig:5281
#6  0x00000000076ec94e in type.Type.comptimeOnly () at type.zig:5248
#7  0x000000000790f70a in type.Type.hasRuntimeBitsAdvanced () at type.zig:2409
#8  0x0000000007770e24 in type.Type.abiAlignmentAdvanced () at type.zig:3068
#9  0x0000000007f56180 in type.Type.lazyAbiAlignment () at type.zig:2806
#10 0x0000000007ca5f3f in Sema.zirAlignOf () at Sema.zig:17121
#11 0x0000000007ab2ccd in Sema.analyzeBodyInner () at Sema.zig:839
#12 0x0000000007aabfb9 in Sema.analyzeBody () at Sema.zig:629
#13 0x00000000078d874b in Module.analyzeFnBody () at Module.zig:5602
#14 0x00000000076deb09 in Module.ensureFuncBodyAnalyzed () at Module.zig:4300
#15 0x00000000076dcf14 in Compilation.processOneJob () at Compilation.zig:3060
#16 0x00000000075af60b in Compilation.performAllTheWork () at Compilation.zig:2998
#17 0x00000000075abe4c in Compilation.update () at Compilation.zig:2326
#18 0x00000000075b9747 in main.updateModule () at main.zig:3323
#19 0x0000000007340b7b in main.buildOutputType () at main.zig:3008
#20 0x000000000731e8f7 in main.mainArgs () at main.zig:230
#21 0x000000000760c808 in main () at stage1.zig:56
(gdb) select 5
(gdb) info locals 
ty = {tag_if_small_enough = 220471216, ptr_otherwise = 0xd241fb0}
(gdb) print ty.ptr_otherwise
$1 = (struct type.Type.Payload *) 0xd241fb0
(gdb) print *ty.ptr_otherwise
$2 = {tag = union_tagged}
(gdb) select 6
(gdb) info locals
ty = {tag_if_small_enough = 220471200, ptr_otherwise = 0xd241fa0}
(gdb) print ty.ptr_otherwise
$3 = (struct type.Type.Payload *) 0xd241fa0
(gdb) print *ty.ptr_otherwise
$4 = {tag = many_mut_pointer}
(gdb) select 7
(gdb) info locals
ty = {tag_if_small_enough = 220471200, ptr_otherwise = 0xd241fa0}
ignore_comptime_only = <optimized out>
sema_kit = {data = {sema = 0x0, block = 0x0, src = {payload = <error reading variable: That operation is not available on integers of more than 8 bytes.>}, some = 0 '\000'}
(gdb) print ty
$5 = {tag_if_small_enough = 220471200, ptr_otherwise = 0xd241fa0}
(gdb) print *ty.ptr_otherwise
$6 = {tag = many_mut_pointer}
(gdb) select 8
(gdb) info locals
field_align = <optimized out>
field = {ty = {tag_if_small_enough = 220471200, ptr_otherwise = 0xd241fa0}, default_val = {tag_if_small_enough = unreachable_value, ptr_otherwise = 0x43}, abi_align = 0, offset = 2863311530, is_comptime = false}
fields = {entries = {bytes = 0xd241de8 "\210\037$\r", len = 3, capacity = 8}, index_header = 0x0}
big_align = 0
struct_obj = 0xd21b848
ty = {tag_if_small_enough = 232543608, ptr_otherwise = 0xddc5578}
target = {cpu = {arch = x86_64, model = 0xb3a0400 <target.x86.cpu.znver1>, features = {ints = {14927186440465943664, 581389934173618218, 64028863, 0, 0}}}, os = {tag = linux, version_range = {payload = <error reading variable: That operation is not available on integers of more than 8 bytes.>}, abi = gnu, ofmt = elf}
strat = {payload = <error reading variable: That operation is not available on integers of more than 8 bytes.>
(gdb) select 9
(gdb) info locals
ty = <optimized out>
target = {cpu = {arch = 72, model = 0x2825042b4864, features = {ints = {9315907525001901312, 5228893572144634052, 15633964735033578891, 9900319355843885121, 3665805736078082}}}, os = {tag = zos, version_range = {payload = <error reading variable: That operation is not available on integers of more than 8 bytes.>}, abi = 46, ofmt = 15}
arena = <optimized out>
(gdb) select 10
(gdb) info locals
inst_data = {src_node = 13, operand = 8108}
val = {tag_if_small_enough = 133171977, ptr_otherwise = 0x7f00b09 <log.log__anon_174419+9>}
operand_src = {payload = <error reading variable: That operation is not available on integers of more than 8 bytes.>
ty = {tag_if_small_enough = 232543608, ptr_otherwise = 0xddc5578}
target = {cpu = {arch = x86_64, model = 0xb3a0400 <target.x86.cpu.znver1>, features = {ints = {14927186440465943664, 581389934173618218, 64028863, 0, 0}}}, os = {tag = linux, version_range = {payload = <error reading variable: That operation is not available on integers of more than 8 bytes.>}, abi = gnu, ofmt = elf}
sema = 0x7ffffffef540
block = 0x7ffffffef860
inst = 8033

ikskuh avatar Oct 20 '22 21:10 ikskuh

The offending line is this: https://github.com/MasterQ32/libgamestudio/blob/73fa66afa462aea5622d639ee266c6bb81271b4b/src/wmb.zig#L1082

The problem is that it isn't reproducible in the context of libgamestudio alone, it only happens in my engine project

ikskuh avatar Oct 20 '22 21:10 ikskuh

Might be fixed by #13017

Vexu avatar Oct 20 '22 22:10 Vexu