mirror of
https://github.com/ziglang/zig.git
synced 2025-12-31 10:33:19 +00:00
Merge pull request #21796 from Rexicon226/var-args
fix callconv resolution for varargs
This commit is contained in:
commit
4adf63aefc
@ -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();
|
||||
|
||||
|
||||
17
src/Sema.zig
17
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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user