% cat test.zig pub fn main() void { var a: u32 = 1; defer { thing1(); print("a"); } } % git log | head commit a7221ef4e902e63e72524559a067afcf6c1dfd17 Author: Andrew Kelley Date: Thu May 6 22:30:44 2021 -0700 Sema: implement `@typeInfo` for functions The goal is to get start code to be able to inspect the calling convention of `main` in order to determine whether to export a main for libc to call, or to allow the root source file to do it. % pwd /home/jacob/dev/zig/build % ninja ninja: no work to do. % ./zig build-exe test.zig -fno-LLVM thread 5505 panic: index out of bounds /home/jacob/dev/zig/src/Module.zig:3119:63: 0xe57dbf in Module.scanDecl (zig1) const decl_block_inst_data = zir.instructions.items(.data)[decl_index].pl_node; ^ /home/jacob/dev/zig/src/Module.zig:3086:21: 0xd1fa81 in Module.scanNamespace (zig1) try scanDecl(&scan_decl_iter, decl_sub_index, flags); ^ /home/jacob/dev/zig/src/Sema.zig:680:35: 0xc055d6 in Sema.analyzeStructDecl (zig1) _ = try sema.mod.scanNamespace(&struct_obj.namespace, extra.end, decls_len, new_decl); ^ /home/jacob/dev/zig/src/Module.zig:2736:31: 0xc04809 in Module.semaFile (zig1) try sema.analyzeStructDecl(new_decl, main_struct_inst, struct_obj); ^ /home/jacob/dev/zig/src/Module.zig:2653:24: 0xa117b0 in Module.semaPkg (zig1) return mod.semaFile(file); ^ /home/jacob/dev/zig/src/Compilation.zig:2027:27: 0xa0667e in Compilation.performAllTheWork (zig1) module.semaPkg(pkg) catch |err| switch (err) { ^ /home/jacob/dev/zig/src/Compilation.zig:1612:31: 0x9ffee8 in Compilation.update (zig1) try self.performAllTheWork(); ^ /home/jacob/dev/zig/src/main.zig:2223:20: 0x99a7df in main.updateModule (zig1) try comp.update(); ^ /home/jacob/dev/zig/src/main.zig:1960:17: 0x8cc058 in main.buildOutputType (zig1) updateModule(gpa, comp, hook) catch |err| switch (err) { ^ /home/jacob/dev/zig/src/main.zig:186:31: 0x8a1767 in main.mainArgs (zig1) return buildOutputType(gpa, arena, args, .{ .build = .Exe }); ^ /home/jacob/dev/zig/src/stage1.zig:45:24: 0x8a11a9 in main (zig1) stage2.mainArgs(gpa, arena, args) catch unreachable; ^ Aborted (core dumped) %