ziglang / zig

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

compilation crash: index out of bound #21179

Open tw4452852 opened 3 weeks ago

tw4452852 commented 3 weeks ago

Zig Version

0.14.0-dev.1292+3fb6e46f6e

Steps to Reproduce and Observed Behavior

zig build, then crash:

error: thread 10593 panic: index out of bounds: index 2, len 2
/home/tw/code/zig/src/codegen/llvm.zig:8836:34: 0x5ff99e9 in airArg (zig)
        const arg_val = self.args[self.arg_index];
                                 ^
/home/tw/code/zig/src/codegen/llvm.zig:4964:51: 0x5b03158 in genBody (zig)
                .arg            => try self.airArg(inst),
                                                  ^
/home/tw/code/zig/src/codegen/llvm.zig:1682:19: 0x5afe20c in updateFunc (zig)
        fg.genBody(air.getMainBody()) catch |err| switch (err) {
                  ^
/home/tw/code/zig/src/link/Elf.zig:2916:70: 0x5fbf235 in updateFunc (zig)
    if (self.llvm_object) |llvm_object| return llvm_object.updateFunc(pt, func_index, air, liveness);
                                                                     ^
/home/tw/code/zig/src/link.zig:426:82: 0x5b08c85 in updateFunc (zig)
                return @as(*tag.Type(), @fieldParentPtr("base", base)).updateFunc(pt, func_index, air, liveness);
                                                                                 ^
/home/tw/code/zig/src/Zcu/PerThread.zig:876:22: 0x5700c5e in linkerUpdateFunc (zig)
        lf.updateFunc(pt, func_index, air, liveness) catch |err| switch (err) {
                     ^
/home/tw/code/zig/src/Compilation.zig:3975:36: 0x528298e in processOneCodegenJob (zig)
            try pt.linkerUpdateFunc(func.func, func.air);
                                   ^
/home/tw/code/zig/src/Compilation.zig:3928:36: 0x52825d1 in queueCodegenJob (zig)
        return processOneCodegenJob(tid, comp, codegen_job);
                                   ^
/home/tw/code/zig/src/Compilation.zig:3682:37: 0x4fa5b8f in processOneJob (zig)
            try comp.queueCodegenJob(tid, .{ .func = .{
                                    ^
/home/tw/code/zig/src/Compilation.zig:3638:30: 0x4d27871 in performAllTheWorkInner (zig)
            try processOneJob(@intFromEnum(Zcu.PerThread.Id.main), comp, job, main_progress_node);
                             ^
/home/tw/code/zig/src/Compilation.zig:3508:36: 0x4bbefb0 in performAllTheWork (zig)
    try comp.performAllTheWorkInner(main_progress_node);
                                   ^
/home/tw/code/zig/src/Compilation.zig:2269:31: 0x4bba759 in update (zig)
    try comp.performAllTheWork(main_progress_node);
                              ^
/home/tw/code/zig/src/main.zig:4156:32: 0x4c09501 in serve (zig)
                try comp.update(main_progress_node);
                               ^
/home/tw/code/zig/src/main.zig:3453:22: 0x4c28f32 in buildOutputType (zig)
            try serve(
                     ^
/home/tw/code/zig/src/main.zig:258:31: 0x4a71ba6 in mainArgs (zig)
        return buildOutputType(gpa, arena, args, .{ .build = .Exe });
                              ^
/home/tw/code/zig/src/main.zig:199:20: 0x4a6eb75 in main (zig)
    return mainArgs(gpa, arena, args);
                   ^
/home/tw/code/zig/lib/std/start.zig:614:37: 0x4a6e69e in main (zig)
            const result = root.main() catch |err| {
                                    ^
../sysdeps/nptl/libc_start_call_main.h:58:16: 0x7f3e375d0c4b in __libc_start_call_main (../sysdeps/x86/libc-start.c)
../csu/libc-start.c:360:3: 0x7f3e375d0d04 in __libc_start_main_impl (../sysdeps/x86/libc-start.c)
../sysdeps/x86_64/start.S:115:0: 0x4a6e2e0 in _start (../sysdeps/x86_64/start.S)

Expected Behavior

no crash

tw4452852 commented 2 weeks ago

I did a little test here, this issue only happens when passing struct argument.

rohlem commented 2 weeks ago

Please also share the input program / the reduced test case that triggered the crash for you.