zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 4adf63aefc62efb301c27d9f6ec71f92f52c23ca (tree)
parent 985b13934da0eea9e01db6232c958485e30b97ef
Author: Matthew Lugg <mlugg@mlugg.co.uk>
Date:   Fri, 25 Oct 2024 18:31:01 +0100

Merge pull request #21796 from Rexicon226/var-args

fix callconv resolution for varargs
Diffstat:
Msrc/Compilation.zig | 1+
Msrc/Sema.zig | 17++++++++++++++++-
2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/src/Compilation.zig b/src/Compilation.zig @@ -1962,6 +1962,7 @@ pub fn destroy(comp: *Compilation) void { comp.failed_win32_resources.deinit(gpa); comp.link_diags.deinit(); + comp.link_task_queue.deinit(gpa); comp.clearMiscFailures(); diff --git a/src/Sema.zig b/src/Sema.zig @@ -26619,6 +26619,7 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A const pt = sema.pt; const zcu = pt.zcu; + const ip = &zcu.intern_pool; const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].pl_node; const extra = sema.code.extraData(Zir.Inst.FuncFancy, inst_data.payload_index); const target = zcu.getTarget(); @@ -26789,7 +26790,21 @@ fn zirFuncFancy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A const zir_decl = sema.code.getDeclaration(decl_inst.resolve(&zcu.intern_pool) orelse return error.AnalysisFail)[0]; if (zir_decl.flags.is_export) { - break :cc .C; + break :cc target.cCallingConvention() orelse { + // This target has no default C calling convention. We sometimes trigger a similar + // error by trying to evaluate `std.builtin.CallingConvention.c`, so for consistency, + // let's eval that now and just get the transitive error. (It's guaranteed to error + // because it does the exact `cCallingConvention` call we just did.) + const cc_type = try sema.getBuiltinType("CallingConvention"); + _ = try sema.namespaceLookupVal( + block, + LazySrcLoc.unneeded, + cc_type.getNamespaceIndex(zcu), + try ip.getOrPutString(sema.gpa, pt.tid, "c", .no_embedded_nulls), + ); + // The above should have errored. + @panic("std.builtin is corrupt"); + }; } } break :cc .auto;