aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorMatthew Lugg <mlugg@mlugg.co.uk>2024-10-25 18:31:01 +0100
committerGitHub <noreply@github.com>2024-10-25 18:31:01 +0100
commit4adf63aefc62efb301c27d9f6ec71f92f52c23ca (patch)
tree5fab2fe1de84f134dce1489802d269fcc4e29474 /src/Sema.zig
parent985b13934da0eea9e01db6232c958485e30b97ef (diff)
parent97e584a6b9786ad942e4c8db0ce5b3b948ddad7e (diff)
downloadzig-4adf63aefc62efb301c27d9f6ec71f92f52c23ca.tar.gz
zig-4adf63aefc62efb301c27d9f6ec71f92f52c23ca.zip
Merge pull request #21796 from Rexicon226/var-args
fix callconv resolution for varargs
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 24e64cbc46..b0ce7729cf 100644
--- 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;