ziglang / zig

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

`zig test` on a missing file crashes the compiler #20954

Closed squeek502 closed 2 months ago

squeek502 commented 2 months ago

Zig Version

0.14.0-dev.850+ddcb7b1c1

Steps to Reproduce and Observed Behavior

> zig test missing.zig
thread 14436 panic: reached unreachable code
C:\Users\Ryan\Programming\Zig\zig\lib\std\debug.zig:384:14: 0xee800d in assert (zig.exe.obj)
    if (!ok) unreachable; // assertion failure
             ^
C:\Users\Ryan\Programming\Zig\zig\src\Zcu.zig:2350:15: 0x1104059 in resolveBaseNode (zig.exe.obj)
        assert(file.zir_loaded);
              ^
C:\Users\Ryan\Programming\Zig\zig\src\Zcu.zig:2372:54: 0x102ee26 in upgrade (zig.exe.obj)
        const file, const base_node = resolveBaseNode(lazy.base_node_inst, zcu);
                                                     ^
C:\Users\Ryan\Programming\Zig\zig\src\Compilation.zig:3404:55: 0x102c751 in addModuleErrorMsg (zig.exe.obj)
    const err_src_loc = module_err_msg.src_loc.upgrade(mod);
                                                      ^
C:\Users\Ryan\Programming\Zig\zig\src\Compilation.zig:3177:38: 0x1033d00 in getAllErrorsAlloc (zig.exe.obj)
                try addModuleErrorMsg(zcu, &bundle, msg.*, &all_references);
                                     ^
C:\Users\Ryan\Programming\Zig\zig\src\main.zig:4494:44: 0x1038467 in updateModule (zig.exe.obj)
    var errors = try comp.getAllErrorsAlloc();
                                           ^
C:\Users\Ryan\Programming\Zig\zig\src\main.zig:3487:21: 0x10a418b in buildOutputType (zig.exe.obj)
        updateModule(comp, color, root_prog_node) catch |err| switch (err) {
                    ^
C:\Users\Ryan\Programming\Zig\zig\src\main.zig:267:31: 0xed40db in mainArgs (zig.exe.obj)
        return buildOutputType(gpa, arena, args, .zig_test);
                              ^
C:\Users\Ryan\Programming\Zig\zig\src\main.zig:199:20: 0xed151e in main (zig.exe.obj)
    return mainArgs(gpa, arena, args);
                   ^
C:\Users\Ryan\Programming\Zig\zig\lib\std\start.zig:591:75: 0xed124a in main (zig.exe.obj)
    return callMainWithArgs(@as(usize, @intCast(c_argc)), @as([*][*:0]u8, @ptrCast(c_argv)), envp);
                                                                          ^
C:\Users\Ryan\Programming\Zig\zig\lib\libc\mingw\crt\crtexe.c:267:0: 0x3841900 in __tmainCRTStartup (crt2.obj)
    mainret = _tmain (argc, argv, envp);

C:\Users\Ryan\Programming\Zig\zig\lib\libc\mingw\crt\crtexe.c:188:0: 0x384195b in mainCRTStartup (crt2.obj)
  ret = __tmainCRTStartup ();

Expected Behavior

Something similar to zig run, zig build-exe, etc:

> zig run missing.zig
C:\Users\Ryan\Programming\Zig\zig\lib\std\std.zig:103:22: error: unable to load './missing.zig': FileNotFound
const root = @import("root");
                     ^~~~~~
squeek502 commented 2 months ago

From https://github.com/ziglang/zig/pull/21061#issuecomment-2285418626:

The underlying problem as far as I can tell is that addModuleErrorMsg was made to depend on the AST of the file, but obviously there's no AST for a file that doesn't exist. The dependency on the AST was introduced in ded5c759f83a4da355a128dd4d7f5e22cbd3cabe