diff options
| author | Matthew Lugg <mlugg@mlugg.co.uk> | 2024-10-25 18:31:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-25 18:31:01 +0100 |
| commit | 4adf63aefc62efb301c27d9f6ec71f92f52c23ca (patch) | |
| tree | 5fab2fe1de84f134dce1489802d269fcc4e29474 /src/Sema.zig | |
| parent | 985b13934da0eea9e01db6232c958485e30b97ef (diff) | |
| parent | 97e584a6b9786ad942e4c8db0ce5b3b948ddad7e (diff) | |
| download | zig-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.zig | 17 |
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; |
